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


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 相关文章推荐
Javascript 各浏览器的 Javascript 效率对比
Jan 23 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
跟我学习javascript的浮点数精度
Nov 16 Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 Javascript
JS如何判断json是否为空
Jul 06 Javascript
Vue自定义事件(详解)
Aug 19 Javascript
Angular实现的简单查询天气预报功能示例
Dec 27 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 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
PHP教程 预定义变量
2009/10/23 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
php define的第二个参数使用方法
2013/11/04 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python代码实现ID3决策树算法
2017/12/20 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
python 下载文件的多种方法汇总
2020/11/17 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
拓展培训心得体会
2014/01/04 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
回门宴父母答谢词
2014/01/26 职场文书
标准毕业生自荐信
2014/06/24 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
高三物理教学反思
2016/02/20 职场文书
同学会演讲稿
2019/04/02 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python