自定义组件-数据监听器

自定义组件 - 数据监听器

1.什么是数据监听器

数据监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。他的作用类似于vue中的watch侦听器。在小程序组件中,数据监听器的基本语法格式如下:

Comonnent({
	observers:{
		'字段A,字段B': function(字段A的新值,字段B的新值) {
		// do something
		}
	}
})

2.数据监听器的基本用法

组件的UI结构如下:

<view>{{n1}} + {{n2}} = {{sum}}</view>
<button size="mini" bindtap="addN1">n1自增</button>
<button size="mini" bindtap="addN2">n2自增</button>

组件的.js文件代码如下:

Component({
	data:{n1:0,n2:0,sum:0},   //数据节点
	methods:{
		addN1(){this.setData({n1:this.data.n1 + 1})},
		addN2(){this.setData({n2:this.data.n2 + 1})}
	},
	observers:{ //数据监听节点
		'n1,n2':function(n1,n2) {           // 监听 n1 和 n2 数据的变化
			this.setData({ sum: n1 + n2 }) // 通过监听器,自动计算 sum 的值
		}
	}
})

3.监听对象属性的变化

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

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

案例-点击按钮颜色变换

组件结构

<view style="background-color: rgb({{fullColor}});" class="colorBox">颜色值:{{fullColor}}</view>
<button size="mini" bindtap="changeR" type="default">R</button>
<button size="mini" bindtap="changeG" type="primary">G</button>
<button size="mini" bindtap="changeB" type="warn">B</button>

组件样式

.colorBox{
    line-height: 200rpx;
    font-size: 24rpx;
    color: white;
    text-shadow: 0rpx 0rpx 2rpx black;
    text-align: center;
}

组件逻辑

// components/test3/test3.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {},
    /**
     * 组件的初始数据
     */
    data: {
        rgb:{
            r:0,
            g:0,
            b:0
        },
        fullColor:'0,0,0'
    },
    /**
     * 组件的方法列表
     */
    methods: {
        changeR(){
            this.setData({
                'rgb.r':this.data.rgb.r + 5 > 255? 255:this.data.rgb.r + 5
            })
        },
        changeG(){
            this.setData({
                'rgb.g':this.data.rgb.g + 5 > 255? 255:this.data.rgb.g + 5
            })
        },
        changeB(){
            this.setData({
                'rgb.b':this.data.rgb.b + 5 > 255? 255:this.data.rgb.b + 5
            })
        }
    },
   observers:{
        // 'rgb.r,rgb.g,rgb.b':function(newValue1,newValue2,newValue3){
        //     this.setData({
        //         fullColor:newValue1+','+newValue2+','+newValue3
        //     })
        // }
        // 第二种方法直接监听整个对象
        'rgb.**':function(obj){
            this.setData({
                fullColor:`${obj.r},${obj.g},${obj.b}`
            })
        }
    }
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值