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


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中使用构造函数实现继承的代码
Aug 12 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
May 29 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
javascript匀速运动实现方法分析
Jan 08 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
Dec 08 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
使用Vue生成动态表单
Nov 26 Javascript
vue组件入门知识全梳理
Sep 21 Javascript
vue $router和$route的区别详解
Dec 02 Vue.js
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中数组的三种排序方法分享
2012/05/07 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP序列化操作方法分析
2016/09/28 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
实用自动化运维Python脚本分享
2018/06/04 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
python中的yield from语法快速学习
2020/11/06 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
中学运动会广播稿
2014/01/19 职场文书
职工运动会邀请函
2014/01/19 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
见习报告的格式
2014/11/04 职场文书
2015年双拥工作总结
2015/04/08 职场文书
公司员工辞职信范文
2015/05/12 职场文书
预备党员考察意见范文
2015/06/01 职场文书
春晚观后感
2015/06/11 职场文书
新年寄语2016
2015/08/17 职场文书