• 小程序全局变量与组件内部实时监听全局变量的改变


    前言:

            小程序的全局变量的设置与修改,并且在页面内部、组件内部实时监听我们全局变量的改动,来实现我们的一些功能效果,比如全局弹框,比如全局loadding效果等等。

    实现效果:

            请求后台前展示loadding,

            请求后台后关闭loadding

     

    实现步骤:

    1、全局变量的设置与修改

    app.js中配置:

    1. App({
    2. //全局监听loadding状态
    3. watch:function(method){
    4. var obj = this.globalData;
    5. //注意,这里的comLoadding对应的是globalData定义的变量
    6. Object.defineProperty(obj,"comLoadding", {
    7. configurable: true,
    8. enumerable: true,
    9. set: function (value) {
    10. //_comLoadding 是自己起的名字,只要和get里面的保持统一就行,方法内部使用变量
    11. this._comLoadding = value;
    12. method(value);
    13. },
    14. get:function(){
    15. return this._comLoadding
    16. }
    17. })
    18. },
    19. globalData: {
    20. comLoadding:false
    21. }
    22. })

    2、页面内部监听与修改

    监听方法:

    1. onLoad: function (options) {
    2. /**
    3. * @tip:loadding的控制状态与全局的控制字段连接
    4. * 1、组件初始化
    5. * 2、绑定组件内部watch
    6. * @time 2022.9.7
    7. * @author zwh
    8. * ---------------------START--------------------------
    9. * */
    10. const self = this;
    11. // 注意:watchBack后面要重新绑定this,否则下边的this找不到
    12. getApp().watch(self.watchBack.bind(self));
    13. // ---------------------END--------------------------
    14. },
    15. // 监听全局的loadding状态
    16. watchBack(comLoadding){
    17. // 监听数据会拿到与当前值相同的数据
    18. if(comLoadding === this.data.loadingFlag) return
    19. // 关闭loadding增加延时效果,目的是效果展示
    20. if(!comLoadding){
    21. setTimeout(()=>{
    22. this.setData({
    23. loadingFlag:comLoadding,
    24. })
    25. },500)
    26. }else{
    27. this.setData({
    28. loadingFlag:comLoadding,
    29. })
    30. }
    31. },

    修改公共变量方法:

    1. //修改全局的内容
    2. getApp().globalData.comLoadding = true
    3. getApp().globalData.comLoadding = false

    3、组件内部监听

    监听方法:

    1. Component({
    2. pageLifetimes: {
    3. show() {
    4. /**
    5. * @tip:loadding的控制状态与全局的控制字段连接
    6. * 1、组件初始化
    7. * 2、绑定组件内部watch
    8. * @time 2022.9.7
    9. * @author zwh
    10. * ---------------------START--------------------------
    11. * */
    12. const self = this;
    13. // 注意:watchBack后面要重新绑定this,否则下边的this找不到
    14. getApp().watch(self.watchBack.bind(self));
    15. // ---------------------END--------------------------
    16. }
    17. },
    18. methods: {
    19. // 监听全局的loadding状态
    20. watchBack(comLoadding){
    21. // 监听数据会拿到与当前值相同的数据
    22. if(comLoadding === this.data.loadingFlag) return
    23. // 关闭loadding增加延时效果,目的是效果展示
    24. if(!comLoadding){
    25. setTimeout(()=>{
    26. this.setData({
    27. loadingFlag:comLoadding,
    28. })
    29. },500)
    30. }else{
    31. this.setData({
    32. loadingFlag:comLoadding,
    33. })
    34. }
    35. },
    36. }
    37. })

    修改公共变量方法:

    1. //修改全局的内容
    2. getApp().globalData.comLoadding = true
    3. getApp().globalData.comLoadding = false

    4、公共 请求接口中  request.js中改变公共变量

    1. //打开loadding
    2. const noNeedLoaddingRouters = ['consumer/live/room-product-list','consumer/loadingImg/find-loading-img']
    3. let needLodding = noNeedLoaddingRouters.filter(v => v === url.split('api/live/')[1]).length > 0 ? true : false
    4. if(!needLodding){
    5. getApp().globalData.comLoadding = true
    6. }
    7. //请求接口
    8. wx.request({
    9. url: url,
    10. data,
    11. method,
    12. header: {},
    13. success:async (res) => {
    14. //关闭loadding
    15. getApp().globalData.comLoadding = false
    16. },
    17. fail: (error) => {
    18. //关闭loadding
    19. getApp().globalData.comLoadding = false
    20. }
    21. }

  • 相关阅读:
    K8S kubectl命令行常用命令参数
    Linux ALSA驱动之Platform源码分析(wm8350.c)
    【vue项目适配可借助于插件lib-flexible 和postcss-px2rem】
    详解C语言const关键字(说明+案例)
    企业使用Windows Sysprep工具来封装Win10、Win11操作系统(全网最新最全)
    城商行该如何实施信息基础设施管理?
    Linux——进程间通信(管道及共享内存)
    Vue使用axios进行get请求拼接参数的两种方式
    String(二)————迭代器及相关接口使用
    机器学习总结
  • 原文地址:https://blog.csdn.net/weixin_44727080/article/details/126751248