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


    背景

    开发者在开发某个功能时,经常会遇到某个对象,某个接口在代码多个地方有被使用到,如果每个地方都写一份,一旦其中一个值发生变化了,那么调用的地方都需要修改。而且很容易遗忘某个地方,导致产品存在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

  • 相关阅读:
    day18 代码回想录 二叉树05 找树左下角的值&路径总和&从中序与后序遍历序列构造二叉树
    【Gopher 学个函数】边学边练,简单为 Go 上个分
    离谱的 CSS!从表盘刻度到艺术剪纸
    深入POD
    云课五分钟-05一段代码修改-AI修改C++
    STM32CubeMX学习笔记-CAN接口使用
    R3LIVE源码解析(10) — R3LIVE中r3live_vio.cpp文件
    今日睡眠质量记录80分
    剑指Offer || 105.岛屿的最大面积
    python文本
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/125439075