我们知道,通过watch可以通过简单监听监听原始值,通过深度监听监听到引用值。然而他们都只能监听到单个值,如果我们要实现多值监听,有什么办法吗?
答案是有的,可以通过computed实现多值监听
computed的使用方法
html:
<div id="app"></div>
javascript:
var myrate = {
template: `<h1>定义子组件</h1>`
}
var App = {
components: { // 声明子组件
"my-rate": myrate
},
template: `<div>
<my-rate></my-rate>
<input type="text" v-model="n1" />
+
<input type="text" v-model="n2" />
*
<input type="text" v-model="rate" />
=
</div>`,
data: function () {
return {
n1: 0, n2: 0, rate: 0,
}
},
// 在此处使用computed监听n1,n2,rate。并将计算结果返回给result
computed: {
result: function () {
return ((this.n1 - 0) + (this.n2 - 0)) * this.rate
}
}
}
new Vue({
el: "#app",
components: {
app: App,
},
template: `<app />`
})
总结:不难看出,如果要使用computed监听多值,只需要在组件内computed对象里写上需要绑定的插值函数即可,通过”this.” + data里面return的值,可实现多值的监听。
如上实现的是一个计算器功能。 值得注意的是:在输入框双向绑定的值是字符串类型,如果要进行操作,则需要通过“-0”实现隐式转换(或是用Number()实现显式转换),否则“+”连字符会把左右两边的字符串链接起来而无法实现计算功能。