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


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 26 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
jquery连缀语法如何实现
Nov 29 Javascript
js或者jquery判断图片是否加载完成实现代码
Mar 20 Javascript
RequireJS使用注意细节
May 15 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
May 18 Javascript
简单实现jQuery进度条轮播实例代码
Jun 20 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
详解vue组件通信的三种方式
Jun 30 Javascript
vue中keep-alive,include的缓存问题
Nov 26 Javascript
vuex实现购物车功能
Jun 28 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 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生成带有雪花背景的验证码
2006/10/09 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python numpy数组复制使用实例解析
2020/01/10 Python
Python调用Windows命令打印文件
2020/02/07 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
儿科护士实习自我鉴定
2013/10/17 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
七夕情人节问候语
2015/11/11 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android