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


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的支持介绍
Dec 10 Javascript
jQuery的cookie插件实现保存用户登陆信息
Apr 15 Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
Dec 11 Javascript
JavaScript设置名字输入不合法的实现方法
May 23 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 Javascript
js中的数组对象排序分析
Dec 11 Javascript
JavaScript canvas实现跟随鼠标移动小球
Feb 09 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
运动会新闻报道稿
2015/07/22 职场文书
Nginx跨域问题解析与解决
2022/08/05 Servers