微信小程序实现watch监听


Posted in Javascript onJune 04, 2020

Vue 提供了一种通用的方式来观察和响应 Vue 实例上的数据变动:监听属性 watch。

虽然watch的滥用会导致性能不佳,但在一些情况下我们还是需要watch,使得代码更加简洁、逻辑更加清晰(其实就是嫌麻烦...)。

小程序实现 类似vue 一样的watch 监听数据

将方法注册到app.js 中也可以使用高级一点的写法

使用装饰器模式将小程序page 重写挂在到生命周期函数上或者挂在页面this 上每次就不需要重新在调用初始化一次。本文对装饰器模式不做介绍这是个思路。等待下次实现

setWatcher(page) {
   let data = page.data; // 获取page 页面data
   let watch = page.watch;
   for(let i in watch){
     let key = i.split('.'); // 将watch中的属性以'.'切分成数组
     let nowData = data; // 将data赋值给nowData
     let lastKey = key[key.length - 1];
     let watchFun = watch[i].handler || watch[i]; // 兼容带handler和不带handler的两种写法
     let deep = watch[i].deep; // 若未设置deep,则为undefine
     this.observe(nowData, lastKey, watchFun, deep, page); // 监听nowData对象的lastKey
     }
 },
 /\*\*
 \* 监听属性 并执行监听函数
 \*/
   observe(obj, key, watchFun, deep, page) {
     let val = obj[key];
     // 判断deep是true 且 val不能为空 且 typeof val==='object'(数组内数值变化也需要深度监听)
     if (deep && val != null && typeof val === 'object') {
     for(let i in val){
     this.observe(val, i, watchFun, deep, page); // 递归调用监听函数
   }
 }
   let that = this;
   Object.defineProperty(obj, key, {
   configurable: true,
   enumerable: true,
   set: function (value) {
     // 用page对象调用,改变函数内this指向,以便this.data访问data内的属性值
     watchFun.call(page, value, val); // value是新值,val是旧值
     val = value;
     if (deep) { // 若是深度监听,重新监听该对象,以便监听其属性。
      that.observe(obj, key, watchFun, deep, page);
     }
   },
   get: function () {
    return val;
   }
   })
 }

页面使用:

onLoad: function () {
   app.setWatcher(this);
     setTimeout(()=>{
     this.setData({
     name:"kangbosodoa"
     })
   },2000)
   },
   watch: {
     name: {
     handler(newValue,oldvalue) {
     console.log(this)
     console.log(newValue,oldvalue,"变化了");
     },
    deep: true
   },
   type:{
     handler(newValue) {
     console.log(newValue,"属性发生变化");
     },
    deep: true // 是否深度监听
   }
 },

到此这篇关于微信小程序实现watch监听的文章就介绍到这了,更多相关小程序watch监听内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 Javascript
jquery+json实现数据列表分页示例代码
Nov 15 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
Node.js中路径处理模块path详解
Nov 14 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
Swiper实现轮播图效果
Jul 03 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
node中的密码安全(加密)
Sep 17 Javascript
vue简单练习 桌面时钟的实现代码实例
Sep 19 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 #Javascript
实现一个Vue自定义指令懒加载的方法示例
Jun 04 #Javascript
vue基础知识--axios合并请求和slot
Jun 04 #Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 #Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 #Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 #Javascript
js实现无刷新监听URL的变化示例代码详解
Jun 03 #Javascript
You might like
PHP可变函数的使用详解
2013/06/14 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python切片索引用法示例
2018/05/15 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
给客户的道歉信
2014/01/13 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
关于建议书的格式范文
2014/05/20 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
质量整改报告范文
2014/11/08 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS