美文网首页微信小程序程序员
微信小程序的全局变量、页面变量,你真的掌握了?

微信小程序的全局变量、页面变量,你真的掌握了?

作者: 老陈说初中数学 | 来源:发表于2019-11-05 21:06 被阅读0次

    开发微信小程序时,遇到的坑挺多的,别的不说,单是变量的应用,就够你折腾一阵子的了,可能,或许是我不熟悉的缘故吧?

    1

    如果你认为你很熟悉的话,那你猜一下,下面的变量—userInfo,是属于全局变量,还是页面变量?

    var userInfo= {

     name: '小明',

     age: 18

    }

    Page({

     onReady: function() {

     console.log(userInfo.name)

     }

    })

    官网介绍时,说:在app.js里的是全局变量,在Page里的是页面(局部变量)。那在Page上的呢?—一开始我认为应该属于局部变量,可使用之后,发现这样使用,会存在一些Bug,有时会出现内容不清空的情况。奇怪的是,开发工具不提醒这种用法是不推荐的,从这些坑坑洼洼来说,微信小程序还是有一定难度的,呵呵~~

    2

    经过一段多次测试,一切按官网出现过的方式进行吧。如果还存在问题,就去社区找茬去。经调整如下,就不会出现数据不清空的现象了。因为这样是属于Page声明周期的变量,记得在通过this调用哦。

    Page({

     userInfo: {

     name: '小明',

     age: 18

     },

     onReady: function() {

     console.log(this.userInfo.name)

     }

    })

    有人就会问了,为什么不用data的方式的,因为有些数据是不属于同步到页面wxml上显示的,只是数据做一下过度而已。

    如果js上的数据要同步到页面上,记得用setData的方式,否则又会踩坑了。

    3

    说完Page上的变量,现在说一下全局变量,第一种,就是常规的,在app.js中声明的这种,它比较适合在两个界面之间的传值方式。当然,如果你非得用缓存也是可以的,只是用全局变量会更简单一些。温馨提醒:在取完全局变量的值之后,记得把它还原为初始值。

    app.js

    App({

     userInfo: null

    })

    index.js(为了让你看的更明白,我把全局放在一个页面上演示了。)

    const app = getApp()

    Page({

     onReady: function() {

     app.userInfo = {

     name: '小明',

     age: 18

     }

      console.log(app.userInfo.name)

     app.userInfo = null

     }

    })

    4

    上面说到两个页面之间传值时,可采用全局或缓存的方式。可如果是整个app,大部分的页面都要用到全局变量时,如果还是用getApp()或缓存方式的话,那挺尴尬的。这里说一下,官网没提到的方式—变量挂载。

    Page({

     onReady: function() {

     wx.userInfo = {

     name: '小明',

     age: 18

     }

     console.log(wx.userInfo.name)

     }

    })

    没错,就是把变量挂载到wx中。这样在所有页面就可以通过wx.userInfo的方式获取了。

    好了,今天就说到这里了,我发的文章大多是项目开发过程中的记录,但愿对你有所帮助。

    相关文章

      网友评论

        本文标题:微信小程序的全局变量、页面变量,你真的掌握了?

        本文链接:https://www.haomeiwen.com/subject/agnebctx.html