美文网首页
[vue]computed & watch

[vue]computed & watch

作者: 钢铁萝莉猫 | 来源:发表于2019-12-13 13:07 被阅读0次
computed和watch都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据(称它为依赖数据)发生变化的时候,自动调用相关函数。

———————————————————————————

computed

computed是计算属性,事实上和和data对象里的数据属性是同一类的(使用上),
例如:

computed:{
  fullName: function () { return this.firstName + this.lastName }
}
  • computed擅长处理的场景:一个数据 受 多个数据影响
    例子中,函数内的任一数据( this.firstName || this.lastName)发生改变,就会引起fullName的改变

在取用的时候,用this.fullName去取用,就和取data一样(不要当成函数调用!!)


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

var vm = new Vue({
  data: { a: 1 },
  computed: {
    // 仅读取
    aDouble: function () {
      return this.a * 2
    },
    // 读取和设置
    aPlus: {
      get: function () {
        return this.a + 1
      },
      set: function (v) {
        this.a = v - 1
      }
    }
  }
})
vm.aPlus   // => 2
vm.aPlus = 3
vm.a       // => 2
vm.aDouble // => 4

计算属性定义:当其依赖的属性的值发生变化时,这个属性的值会自动更新;同时,与其相关的DOM也会同步更新。

(计算属性默认只有getter.)

更改了getter里使用的变量,就会触发computed的更新,前提是computed里的值必须要在模板里使用才行。

如果直接修改了计算属性中的变量,就相当于设置了它,就会触发setter。


watch

类似于监听机制+事件机制

  • 监听某个值,该值发生变化就调用下面的函数

例如:

watch: {
  firstName: function (val) { this.fullName = val + this.lastName }
}
  • watch擅长处理的场景:一个数据影响多个数据
    例子中只要firstName变化,就会触发下面的方法,使得this.fullName发生变化

———————————————————————————

  • 只是对某一个值或属性进行监听的话,可以直接监听
watch:{
     a(val, oldVal){//普通的watch监听
         console.log("a: "+val, oldVal);
     },
}

———————————————————————————

  • 如果是对整个对象进行深层监听:
watch: {
  obj: {
    handler(newName, oldName) {
      console.log('obj.a changed');
    },
    immediate: true,
    deep: true
  }
}

———————————————————————————

  • 【watch 的一个特点是,最初绑定的时候是不会执行的】
    解决:
immediate: true

———————————————————————————

相关文章

网友评论

      本文标题:[vue]computed & watch

      本文链接:https://www.haomeiwen.com/subject/rgdfnctx.html