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


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 常用操作整理 基础入门篇
Oct 14 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
Aug 22 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
深入理解Javascript中的作用域链和闭包
Apr 25 Javascript
微信小程序实现页面跳转传值的方法
Oct 12 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
解决Nuxt使用axios跨域问题
Jul 06 Javascript
vue3+typeScript穿梭框的实现示例
Dec 29 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
wordpress之wp-settings.php
2007/08/17 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
python回调函数的使用方法
2014/01/23 Python
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python实现简单登录验证
2016/04/13 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
django_orm查询性能优化方法
2018/08/20 Python
Python爬虫文件下载图文教程
2018/12/23 Python
详解Python中is和==的区别
2019/03/21 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
Python装饰器的练习题
2021/11/23 Python