微信小程序全局变量改变监听的实现方法


Posted in Javascript onJuly 15, 2019

问题来源

最近工作需要写小程序页面,其中有个页面情况为:父页面中包含了一个组件页面,组件页面中又包含了另外一个组件页面。

需求为:点击最后一个组件页面中的一个view,需要显示最外层父页面中的一个弹出层,并且动态的展示值,这个值的来源就是最后一个组件页面中的内容。

处理办法

当时想到的就是使用全局变量,在 app.js 中定义好全局变量,点击组件页面时就修改全局变量的值,父页面同样使用全局变量的值,这样一来就可以动态打开/关闭弹出层且传递值了。

下面先看看 app.js 中怎么定义的:

globalData: {
 openid: '',
 userInfo: null,
 _showPictureDetail: false,
 _pictureTime: '',
 _pictureAddress: '',
 //改变量用户存放全局变量修改过程中的值传递, 传递对象
 data: {}
 }

在其他页面就使用 getApp().globalData.参数名 = 值 的形式来改变参数值, 使用 getApp().globalData.参数名 的形式来获取值。

这样能正常赋值,但是由于都是在同一个界面展示,我需要更新值后,马上得到最新的值。上面简单的设置获取就不起作用了。

那么,就需要监听 globalData 中的属性了。

首先是 app.js:

//app 全局属性监听
 watch: function (method) {
 var obj = this.globalData;
 Object.defineProperty(obj, "data", { //这里的 data 对应 上面 globalData 中的 data
 configurable: true,
 enumerable: true,
 set: function (value) { //动态赋值,传递对象,为 globalData 中对应变量赋值
 this._showPictureDetail = value.showPictureDetail;
 this._pictureTime = value.pictureTime;
 this._pictureAddress = value.pictureAddress;
 method(value);
 },
 get: function () { //获取全局变量值,直接返回全部
 return this.globalData;
 }
 })
 },

接下来就是在组件页面事件中动态赋值:

//图片拍摄详情查看
 viewPictureDetailInfo: function (e) {
 // 修改 app 全局属性值, 由于 globalData.data 是个对象,因为涉及到修改多个参数,所以需要传递对象
 app.globalData.data = {
 '_showPictureDetail': true,
 '_pictureTime': e.currentTarget.dataset.phototime,
 '_pictureAddress': e.currentTarget.dataset.address
 }
 },

最后就是在最外层父页面添加 app.js 监听回调,动态修改变量值,以达到动态打开/关闭弹出层和展示内容了:

// 首先需要在父页面 onLoad() 方法中添加监听以及指定监听回调方法
// 设置 App 监听回调
// 如果其他页面修改了 app.js 中的 showPictureDetail 值, 就会触发回调
getApp().watch(self.watchBack)

//定义监听回调方法
//app 监听回调方法
 watchBack: function (value) { //这里的value 就是 app.js 中 watch 方法中的 set, 返回整个 globalData
 this.setData({
 showPictureDetail: value._showPictureDetail,
 pictureTime: value._pictureTime,
 pictureAddress: value._pictureAddress
 });
 },

这样,在父页面中使用 showPictureDetail..这几个变量就可以动态展示了。

PS:我这边的业务需求涉及到多个变量的监听,如果你只有一个变量的监听,那么只需要修改 app.js 中 watch 方法的 Object.defineProperty 内容由对象传递变为单个值传递即可。在更新值和获取值时传递就是一个值,而不是对象。

可以参考:https://3water.com/article/165365.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
理解JavaScript中的对象 推荐
Jan 09 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
May 07 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
jQuery中prependTo()方法用法实例
Jan 08 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
javascript异常处理实现原理详解
Feb 17 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 #Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 #Javascript
如何给element添加一个抽屉组件的方法步骤
Jul 14 #Javascript
详解vuex的简单todolist例子
Jul 14 #Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 #Javascript
微信小程序解析富文本过程详解
Jul 13 #Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
Jul 13 #Javascript
You might like
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
webpack3之loader全解析
2017/10/26 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
tensorflow实现加载mnist数据集
2018/09/08 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
无故旷工检讨书
2014/01/26 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
大学信息公开实施方案
2014/03/09 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2015年市场部工作总结
2015/04/30 职场文书
搞笑结婚保证书
2015/05/08 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
股东协议书范本2016
2016/03/21 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python