微信小程序数据监听器使用实例详解

 更新时间:2023年04月24日 09:44:06   作者:大熊李子  
这篇文章主要介绍了微信小程序数据监听器使用实例,数据监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。它的作用类似于vue中的watch侦听器

一、数据监听器

1.1 什么是数据监听器

数据监听器用于 监听和响应任何属性和数据字段的变化,从而执行特定的操作 。它的作用类似于 vue 中

的 watch 侦听器。在小程序组件中,

在componets中新建一个test2文件夹在文件夹里新建component

在app.json usingComponents中 添加组件目录:

数据监听器的基本语法格式如下:

1.2 数据监听器的基本用法

"usingComponents": {
"my-test1":"/components/test/test",
"my-test2":"/components/test2/test2",
},
Component({
observers:{
'字段A,字段B': function(字段A的新值,字段B的新值)
//do something
}
})

组件的 .js 文件

<!--components/test2/test2.wxml-->
<view>{{n1}} + {{n2}} = {{sum}}</view>
<button bindtap="addN1">n1+1</button>
<button bindtap="addN2">n2+1</button>
// components/test2/test2.js
Component({
/**
* 组件的初始数据
*/
data: {
n1:0,
n2:0,
sum:
},
/**
* 组件的方法列表
*/
methods: {
addN1(){
this.setData({
n1:this.data.n1 + 1
})
},
addN2() {
this.setData({
n2:this.data.n2 + 1
})
}
},
// 数据监听节点
observers:{
'n1,n2':function(new1,new2){ //监听 n1 和 n2数据的变化
this.setData({ // 通过监听器,自动计算sum的值
sum: new1 + new
})
}
}
})

1.3 监听对象属性的变化

数据监听器支持监听对象中 单个 或 多个属性 的变化,示例语法如下:

二、数据监听器

在componets中新建一个test3文件夹在文件夹里新建component

在app.json usingComponents中 添加组件目录:

Compoent({
observers:{
'对象.属性A,对象.属性B':function(属性A的新值,属性B的新值){
// 触发此监听器的 3 种情况
// [为属性A赋值]使用 setData 设置this.data.对象.属性A 时触发
// [为属性B赋值] 使用setData 设置 this.data.对象.属性B 时触发
// [直接为对象赋值] 使用setData 设置this.data对象 时触发
// do something
}
}
})

.wxml 结构 .wxss 样式

"usingComponents": {
"my-test1":"/components/test/test",
"my-test2":"/components/test2/test2",
"my-test3":"/components/test3/test3"
}
// components/test3/test3.js
Component({
/**
* 组件的初始数据
*/
data: {
rgb:{ // rgb 的颜色值对象
r:0,
g:0,
b:
},
fullColor: '0, 0, 0' //根据rgb对象的三个属性,动态计算fullColor 的值
},
})
<!--components/test3/test3.wxml-->
<view style="background-color:rgb({{fullColor}});"class="colorBox">颜色值:
{{fullColor}}</view>
<button size="mini" type="default" bindtap="changeR">R</button>
<button size="mini" type="primary" bindtap="changeG">G</button>
<button size="mini" type="warn" bindtap="changeB">B</button>
<view>{{rgb.r}},{{rgb.g}},{{rgb.b}}</view>
/* components/test3/test3.wxss */
.colorBox {
line-height: 200rpx;
font-size:24rpx;
color:white;
text-shadow:0rpx 0rpx 2rpx black;
text-align:center;
}

2.1 监听对象中指定属性的变化

// components/test3/test3.js
Component({
/**
* 组件的方法列表
*/
methods: {
changeR(){ //修改 rgb 对象上 r属性的值
this.setData({
'rgb.r':this.data.rgb.r + 5 > 255? 255 : this.data.rgb.r +
5
})
},
changeG(){ // 修改rgb对象上r属性的值
this.setData({
'rgb.g':this.data.rgb.g + 5 >255 ?255 :this.data.rgb.g +
})
},
changeB(){//修改 rgb对象上b属性的值
this.setData({
'rgb.b':this.data.rgb.b + 5 > 255? 255 :this.data.rgb.b +
})
}
}
})

2.2 监听对象中所有属性的变化

如果某个对象中需要被监听的属性太多,为了方便,可以使用 通配符 ** 来 监听 对象 中所有属性的变化,代码结构如下

observers:{
// 监听rgb 对象上 r,g,b 三个属性的变化
'rgb.r,rgb.g, rgb.b':function(r,g,b){
this.setData({
//为data中的fullColor 重新赋值
fullColor:`${r},${g},${b}`
})
}
}
observers:{
// 监听rgb 对象上 所有属性的变化
'rgb.**':function(obj){
this.setData({
fullColor:`${obj.r},${obj.g},${obj.b}`
})
}
}

三、纯数据字段

3.1 什么是纯数据字段

概念: 纯数据字段 指的是那些 不用于界面渲染的 data 字段。

应用场景:例如有些情况下,某些 data 中的字段 既不会展示在界面上,也不会传递给其他组件 ,仅仅在当前组件内部使用。带有这种特性的 data 字段适合被设置为纯数据字段。

优点:纯数据字段 有助于提升页面更新的性能。

3.2 使用规则

在 Component 构造器的 options 节点中,指定 pureDataPattern 为一个 正则表达式 ,字段名符合这个正则表达式的字段将成为纯数据字段,示例代码如下:

3.3 使用纯数据字段改造数据监听器

Component({
options: {
// 指定所有 _ 开头的数据字段为纯数据字段
pureDataPattern:/^_/
},
data: {
a:true, // 普通数据字段
_b:true, // 纯数据字段
}
}
})
// components/test3/test3.js
Component({
options:{
// 指定所有_ 开头的数据字段为纯数据字段
pureDataPattern:/^_/
}

到此这篇关于微信小程序数据监听器使用实例详解的文章就介绍到这了,更多相关小程序数据监听器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序websocket聊天室的实现示例代码

    微信小程序websocket聊天室的实现示例代码

    这篇文章主要介绍了微信小程序websocket聊天室的实现示例代码,小程序本身对http、websocket等连接均有诸多限制,所以这次项目选择了node.js自带的ws模块。感兴趣的可以参考一下
    2019-02-02
  • Javascript实现图片懒加载插件的方法

    Javascript实现图片懒加载插件的方法

    最近由于公司项目需要,要利用Javascript实现图片懒加载效果,尝试起来发现并不难,于是将自己的实现过程分享出来给大家学习和参考,希望对有需要的朋友们带来一定的帮助,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • javascript 判断当前浏览器版本并判断ie版本

    javascript 判断当前浏览器版本并判断ie版本

    这篇文章主要介绍了javascript 判断当前浏览器版本并判断ie版本的相关资料,需要的朋友可以参考下
    2017-02-02
  • Bootstrap图片轮播组件Carousel使用方法详解

    Bootstrap图片轮播组件Carousel使用方法详解

    这篇文章主要为大家详细介绍了Bootstrap图片轮播组件Carousel使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • JS实现的仿淘宝交易倒计时效果

    JS实现的仿淘宝交易倒计时效果

    这篇文章主要介绍了JS实现的仿淘宝交易倒计时效果,涉及JavaScript针对时间与日期的动态操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • TypeScript中的类型运算符实现

    TypeScript中的类型运算符实现

    TypeScript 是一种强类型语言,它通过使用类型运算符来强化类型安全性,本文主要介绍了TypeScript中的类型运算符实现,感兴趣的可以了解一下
    2023-10-10
  • 详解如何在JavaScript中使用装饰器

    详解如何在JavaScript中使用装饰器

    Decorator装饰器是ES7的时候提案的特性,目前处于Stage 3候选阶段(2022年10月)。装饰器简单来说就是修改类和类方法的语法糖,很多面向对象语言都有装饰器这一特性。本文就来说说如何在JavaScript中使用装饰器,需要的可以参考一下
    2022-10-10
  • jquery ajax应用中iframe自适应高度问题解决方法

    jquery ajax应用中iframe自适应高度问题解决方法

    很多管理系统中,都使用iframe进行信息内容的展示方式,或者作为主菜单的链接展示内容。使用iframe的问题就是自适应高度的问题
    2014-04-04
  • 深入理解JavaScript系列(2) 揭秘命名函数表达式

    深入理解JavaScript系列(2) 揭秘命名函数表达式

    网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点
    2012-01-01
  • Bootstrap按钮组简单实现代码

    Bootstrap按钮组简单实现代码

    这篇文章主要为大家详细介绍了Bootstrap按钮组的简单实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03

最新评论