Computed属性实现本质
computed实际上是利用getter属性建立了计算属性与原属性之间的绑定关系,所以是没有任何副作用的。能通过computed解决的问题应该优先使用computed。
计算属性默认只有getter,不过在需要的时候也可以提供一个setter:// ...computed: { fullName: { // getter get: function () { return this.firstName + ' ' + this.lastName }, // setter set: function (newValue) { var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } }}// ...
计算属性VS方法
- 计算属性会缓存结果,只要原属性不发生改变,计算属性就不会重新计算;
- 但是每当出发重新渲染之后使用‘方法‘都会重新计算,无论原属性是否发生变化。
- 如果不需要缓存则使用方法,方法还有一个好处是可以传参,可以把方法执行过程中的临时变量的值传进方法体进行计算,而计算属性做不到,因为他的实现是通过getter属性而非一个方法。
- { {addHandle(item)}}
methods: { addHandle(item) { return item++ }}
方法更加灵活的实现了对v-for中的item进行处理。
计算属性VS侦听属性
var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' }, watch: { firstName: function (val) { this.fullName = val + ' ' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + ' ' + val } }})
var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } }})
计算属性和监听属性的区别,监听属性一次只能监听一个属性,无法一次对多个属性的变化做出响应,而计算属性可以做到。
侦听器的使用场景
watch用于处理较为复杂的场景,当需要在数据变化的时候进行异步或者开销比较大的操作的时候,这个方法是最有用的。
Ask a yes/no question:
{
{ answer }}