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


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 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
jQuery的text()方法用法分析
Dec 20 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
js时间控件只显示年月
Jan 08 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
详解angular中的作用域及继承
May 31 Javascript
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
Vuex实现购物车小功能
Aug 17 Javascript
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
详解 TypeScript 枚举类型
Nov 02 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
php数据库备份还原类分享
2014/03/20 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
Python基于DES算法加密解密实例
2015/06/03 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
酒店公关部经理岗位职责
2013/11/24 职场文书
新学期开学寄语
2014/01/18 职场文书
相亲大会策划方案
2014/06/05 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
公司转让协议书
2016/03/19 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
PHP实现rar解压读取扩展包小结
2021/06/03 PHP