Skip to content

Vue2 中的 Computed 与 Watch

Computed

  • computed 是一个计算属性,类似过滤器,对绑定的 view 的数据进行处理

  • computed 里面必须有 return

javascript
data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }

fullname 不能在 data 里面定义 因为 computed 作为计算属性定义的 fullName 并返回对应的结果这个变量,变量不可以重复定义和赋值

javascript
data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
  fullName:{
   get(){//回调函数 当需要读取当前属性值是执行,根据相关数据计算并返回当前属性的值
      return this.firstName + ' ' + this.lastName
    },
   set(val){//监视当前属性值的变化,当属性值发生变化时执行,更新相关的属性数据
       //val就是fullName的最新属性值
       console.log(val)
        const names = val.split(' ');
        console.log(names)
        this.firstName = names[0];
        this.lastName = names[1];
   }
   }
  }

Watch

  • Watch 就是一个观察动作,实时更新。
javascript
<div>
      <p>FullName: {{fullName}}</p>
      <p>FirstName: <input type="text" v-model="firstName"></p>
</div>

new Vue({
  el: '#root',
  data: {
    firstName: 'Dawei',
    lastName: 'Lou',
    fullName: ''
  },
  watch: {   //普通的watch监听
    firstName(newName, oldName) {
      this.fullName = newName + ' ' + this.lastName;
    }
  }
})
  • 监听复杂类型
javascript
watch: {
  firstName: {
    handler(newName, oldName) {
      this.fullName = newName + ' ' + this.lastName;
    },
    // 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法
    immediate: true,
    deep:true
  }
}

我们给 firstName 绑定了一个 handler 方法,之前我们写的 watch 方法默认写的就是 handler 而 immediate:true 代表 如果在 watch 里声明了 firstName 之后,就会立即先去执行里面的 handler 方法,如果为 false 就跟我们以前的效果一样,不会在绑定的时候就执行