Vue基础篇:属性监听变化

1,719 阅读2分钟
1. 计算属性 computed

computed: 以类似于定义一个“属性”的形式,监听data中,其他属性的变化, 具备缓存机制

export default {
    name: 'computed',
    computed: { //计算属性, data的属性变化,都会关联到这个方法,只要有被引用
        fullName: function() {
            return this.firstName + this.lastName;
        },

        //等价于上面fullName方法,计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter 
        //
        // fullName: {
        //     get: function() {
        //         return this.firstName + '|' + this.lastName;
        //     },

        //     set: function(value) {
        //         var names = value.split('|')
        //         this.firstName = names[0]
        //         this.lastName = names[names.length - 1]
        //     }
        // }
    },
    data() {
        return {
            firstName: '',
            lastName: '',
            allName: ''
        }
    },
}
2. 侦听器 watch

watch: 对data中的属性进行观察监听其数据变动

     created() {

     },
  // 侦听属性:观察和响应 Vue 实例上的数据变动
    watch: {
        firstName: function(value) {
            console.log('firstName:' + value);
            this.allName = value + this.lastName;
        },

        lastName: function(value) {
            console.log('lastName:' + value);
            this.allName = this.firstName + value;
        }
    },
3. 定义方法函数 methods

methods: vue支持在插值表达式中使用函数

  methods: {
        fullNameEvent: function() {
            return this.firstName + this.lastName;
        }
    }
4. 区别
computed和watch的差异
  1.computed里属性名是自定义的,它可以监听一个或多个它所依赖的数据项;而watch一次只能监听一个属性,这个属性函数接收两个参数,一个是新值一个是旧值。
   
  2.computed里自定义的属性不能与data里的属性重复,否则会报错;而watch里监听的属性必须是已存在的,其要么是data里的属性,要么是computed里计算出来的属性。
   
  3.watch是允许异步操作的(访问一个API),并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。

computed和methods的差异

  1.computed是响应式的,methods并非响应式。。
   
  2.调用方式不一样,computed定义的成员像属性一样访问,methods定义的成员必须以函数形式调用。
   
  3.computed是带缓存的,只有其引用的响应式属性发生改变时才会重新计算,而methods里的函数在每次调用时都要执行。
  
  3.computed中的成员可以只定义一个函数作为只读属性,也可以定义get/set变成可读写属性,这点是methods中的成员做不到的。