vue的侦听器(watch)

语法

方式一

data () {
    return {
        someValue: 'hello'  
    }
},
watch: {
    someValue (newValue, oldValue) {
        console.log(newValue)
    }
}

方式二

data () {
    return {
        someValue: 'hello'  
    }
},
watch: {
  someValue: {
    handler (newValue, oldValue) {
      console.log(newValue)
    },
       // ...
  }
}

特殊类型

对象(数组)

data () {
  return {
    person: {
      age: 18
    }   
    }
},
watch: {
  person: {
    handler (newValue, oldValue) {
      console.log(newValue)
    },
    deep: true
  }
}

对象的具体属性

方式一
data () {
  return {
    person: {
      age: 18
    }   
    }
},
computed: {
  age () {
    return this.person.age
  }
},
watch: {
    age (newValue, oldValue) {
        console.log(newValue)
    }
}
方式二
data () {
  return {
    person: {
      age: 18
    }   
    }
},
watch: {
    'person.age' (newValue, oldValue) {
        console.log(newValue)
    }
}

属性

deep

handler (newValue, oldValue) {
  console.log(newValue)
},
deep: true

默认值是 false,代表是否深度监听
默认情况下 handler 只监听对象引用的变化,只有给对象赋值的时候它才会被监听到,当使用这个属性后,侦听器会遍历对象,为对象的所有属性加上侦听器,所以当对象的任何属性变化都会触发侦听器中的handler。当对象属性多的时候,性能开销会比较大,此时可以监听对象的某个具体属性。

immediate

handler (newValue, oldValue) {
  console.log(newValue)
},
immediate: true

watch在初始化绑定的时候不会执行,等到改变之后才会去侦听计算。使用这个属性后,在初始化绑定的时候,也会去执行侦听器。

官方文档示例

var vm = new Vue({
  data: {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: {
      f: {
        g: 5
      }
    }
  },
  watch: {
    a: function (val, oldVal) {
      console.log('new: %s, old: %s', val, oldVal)
    },
    // 方法名
    b: 'someMethod',
    // 深度 watcher
    c: {
      handler: function (val, oldVal) { /* ... */ },
      deep: true
    },
    // 该回调将会在侦听开始之后被立即调用
    d: {
      handler: function (val, oldVal) { /* ... */ },
      immediate: true
    },
    e: [
      function handle1 (val, oldVal) { /* ... */ },
      function handle2 (val, oldVal) { /* ... */ }
    ],
    // watch vm.e.f's value: {g: 5}
    'e.f': function (val, oldVal) { /* ... */ }
  }
})
vm.a = 2 // => new: 2, old: 1

监听路由

刷新本页面的时候可以传一个时间戳,通过监听路由重新调用所有方法

watch:{
  $route(to,from){
    console.log(to.path);
  }
},

网站导航

网站导航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,882评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,956评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,019评论 6 13
  • 1 “今天我终于把自己嫁出去了。”小芸喝多了,开始自言自语:“不就结个婚么?怎么就这么难,我爱得那么认真,以为只差...
    汉堡麻麻阅读 3,663评论 0 4
  • 第一回:老街 在那个起风的黄昏,女孩坐在秋千上摇摆,地上的一个个水潭上倒影出她纯净的侧脸,似是无法拼起的破碎记...
    祁小羲吖阅读 1,355评论 0 0

友情链接更多精彩内容