vue 监听器watch

vue 监听器watch

new Vue({
  el: '#root',
  template: `<div>
  <div>Name: {{name}}</div>
  <div>Name: {{getName()}}</div>
  <div>FullName: {{fullName}}</div>
  <div>FirstName: <input v-model="fisrtName" /></div>
  <div>LastName: <input v-model="lastName" /></div>
  </div>`,
  data () {
    return {
      fisrtName: 'hello',
      lastName: 'world',
      fullName: ''
    }
  },
  computed: {
    name () {
      console.log('new name')
      return `${this.fisrtName} ${this.lastName}`
    }
  },
  watch: {
    fisrtName (newName, oldName) {
      this.fullName = `${newName} ${this.lastName}`
    }
  },
  methods: {
    getName () {
      console.log('get name')
      return `${this.fisrtName} ${this.lastName}`
    }
  }
})

watch 方法可以监听变量,在watch对象中,变量是watch对象的键,而值是函数,函数接收两个参数,第一个是新值,第二个是更改前的旧值。
注意,初始化时,watch对象中的方法不会执行。但是可以配置immediate属性,使其立即执行。此时值是包括选项的对象。

  watch: {
    fisrtName: {
      handler (newName, oldName) {
        this.fullName = `${newName} ${this.lastName}`
      },
      immediate: true
    }
  }

watch可以用于,当监听的值发生改变时,向后台发送请求

watch 还有一个deep属性

new Vue({
  el: '#root',
  template: `<div>
  <div>Ojb.a: <input v-model="obj.a" /></div>
  </div>`,
  data () {
    return {
      obj: {
        a: '111'
      }
    }
  },
  watch: {
    obj: {
      handler () {
        console.log('obj.a changed')
      },
      immediate: true,
      deep: true
    }
  }
})

更改obj.a时,watch监听的obj方法不会执行,加deep属性为true时,更改obj.a的值,obj方法会执行

优化方法

  watch: {
    'obj.a': {
      handler () {
        console.log('obj.a changed')
      },
      immediate: true
    }
  }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值