• 如何在快应用中定义一个全局对象


    背景

    开发者在开发某个功能时,经常会遇到某个对象,某个接口在代码多个地方有被使用到,如果每个地方都写一份,一旦其中一个值发生变化了,那么调用的地方都需要修改。而且很容易遗忘某个地方,导致产品存在bug。如何在快应用中定义一个全局对象呢?只需要修改这个全局对象,其他地方都可以同步修改呢?

    解决方案

    可在manifest文件的data中定义,然后在各个ux页面通过this.$app.$data.xxx形式去调用。 您也可以在app.ux中定义全局对象,并在各个ux页面通过this.$app.$def.xxx形式去调用。下面我们分别介绍这2个方案的实现。

    方案1:在manifest.json中配置

    相关代码如下:

    manifest.json文件配置

    1. "config": {
    2. "data": {
    3. "globalData": "GlobalData"
    4. }
    5. },

    hello.ux 页面

    1. <template>
    2. <!-- Only one root node is allowed in template. -->
    3. <div class="container">
    4. <input type="button" value="切换" onclick="switchValue" />
    5. <text>这是一个全局变量{{value}}</text>
    6. </div>
    7. </template>
    8. <style>
    9. .container {
    10. flex-direction: column;
    11. justify-content: center;
    12. align-items: center;
    13. }
    14. </style>
    15. <script>
    16. module.exports = {
    17. data: {
    18. componentData: {},
    19. value: '',
    20. display: true
    21. },
    22. onInit() {
    23. this.$page.setTitleBar({
    24. text: 'menu',
    25. textColor: '#ffffff',
    26. backgroundColor: '#007DFF',
    27. backgroundOpacity: 0.5,
    28. menu: true
    29. });
    30. },
    31. onShow(options) {
    32. '// Do something when show.'
    33. this.value = this.$app.$data.globalData
    34. console.log("message:", this.value);
    35. },
    36. switchValue () {
    37. this.$app.$data.globalData = "test"
    38. this.value = this.$app.$data.globalData
    39. console.log("message:", this.value);
    40. },
    41. }
    42. </script>

    运行效果:

    1.png

    2.png

    图1  获取全局对象初始值

    图2 修改全局对象值

    日志如下

    3.png

    方案2:app.ux配置

    app.ux代码:

    1. <script>
    2. module.exports = {
    3. onCreate() {
    4. console.info('Application onCreate');
    5. },
    6. onDestroy() {
    7. console.info('Application onDestroy');
    8. },
    9. dataApp: {
    10. globalData: "GlobalData in app.ux"
    11. }
    12. }
    13. </script>

    hello.ux代码:

    1. <template>
    2. <!-- Only one root node is allowed in template. -->
    3. <div class="container">
    4. <input type="button" value="切换" onclick="switchValue" />
    5. <text>这是一个全局变量{{value}}</text>
    6. </div>
    7. </template>
    8. <style>
    9. .container {
    10. flex-direction: column;
    11. justify-content: center;
    12. align-items: center;
    13. }
    14. </style>
    15. <script>
    16. module.exports = {
    17. data: {
    18. componentData: {},
    19. value: '',
    20. display: true
    21. },
    22. onInit() {
    23. this.$page.setTitleBar({
    24. text: 'menu',
    25. textColor: '#ffffff',
    26. backgroundColor: '#007DFF',
    27. backgroundOpacity: 0.5,
    28. menu: true
    29. });
    30. },
    31. onShow(options) {
    32. '// Do something when show.'
    33. this.value = this.$app.$def.dataApp.globalData
    34. console.log("message:", this.value);
    35. },
    36. switchValue() {
    37. this.$app.$def.dataApp.globalData = "test"
    38. this.value = this.$app.$def.dataApp.globalData
    39. console.log("message1111111:", this.value);
    40. },
    41. }
    42. </script>

    运行效果:

    4.png

    5.png

    图1  获取全局对象初始值

    图2 修改全局对象值

    日志如下:

    6.png

    欲了解更多详情,请参阅:

    快应用manifest.json文件

    https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-manifest

    快应用script脚本:

    https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-script#h2-1575380435413

  • 相关阅读:
    m基于MATLAB数字调制解调仿真,包括ASK,FSK,DPSK及MDPSK,对比误码率
    Spring Cloud之微服务
    从 Linux 其它用户复制 conda 的虚拟环境
    计算机网络工程毕业设计题目选题大全
    Socks5代理和代理IP
    ELK企业级日志分析系统
    2023年【起重信号司索工(建筑特殊工种)】考试总结及起重信号司索工(建筑特殊工种)模拟考试题
    基于springboot的大学计算机基础网络教学系统
    【技术】SQL动态排序?
    地震褶积方法制作合成地震记录c++
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/125439075