计算属性
计算属性是基于它们的响应式依赖进行缓存的。 只在相关响应式依赖发生改变时它们才会重新求值。 这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
<div id="example">
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
reversedMessage () {
return this.message.split('').reverse().join('')
}
}
})
与使用methods里的函数相比,每当触发重新渲染时,methods里的函数会再次执行,因为没有缓存。
侦听器
侦听器: 一个对象,键是需要观察的表达式,值是对应回调函数 ,也可以是方法名 ,或者包含选项的对象 。 Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property。
watch: {
a: function (val, oldVal) { },
b: 'someMethod',
c: {
handler: function (val, oldVal) { },
deep: true,
immediate: true
}
}
过滤器
过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。
{{ message | capitalize }}
<div v-bind:id="rawId | formatId"></div>
{{ message | filterA | filterB }}
{{ message | filterA('arg1', arg2) }}
filters: {
capitalize (value) {
if (!value) return ''
return value.toString().charAt(0).toUpperCase() + value.toString().slice(1)
}
}
this.$watch
vm.$watch('msg',
function () {
},
{
deep: Boolean,
immediate: Boolean
}
)
this.$watch('model', () => {
this.model && this.form.setFieldsValue(pick(this.model, fields))
})
vm.$watch(function () {
return this.a + this.b
}, )
计算属性vs侦听器
计算属性擅长处理的是:多个数据影响一个数据。 侦听器擅长处理的是:一个数据影响多个数据。
计算属性的应用场景是计算的内容依赖多个属性,每次依赖项发生变化时,都会重新缓存结果。 在数据变化频率比较高,执行异步或者开销较大的操作时,适合使用侦听器。 在侦听器中可以执行异步,但是计算属性中不可以。 computed和watch的使用场景 侦听器详解
|