码迷,mamicode.com
首页 > 其他好文 > 详细

vue中watch的使用

时间:2017-05-30 21:01:39      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:cdn   his   重要   第一个   style   不能   change   new   www   

vue中watch的使用

  vue中的watch是一个比较重要的概念,通过他我们可以检测data的变化,下面进行详细的介绍。

  watch定义方式如下:

{[key: string]: string | Function | Object  }

  即在watch中,

  • 键是一个字符串,它是被观测的对象。
  • 值可以是一个字符串,这个字符串是方法名。
  • 值还可以是一个函数,但不能使用箭头函数的形式,this会出现问题。
  • 值也可以是一个对象,其中包含回调函数可以其他一些选项:比如是否深度遍历。

  举例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.js"></script>
</head>
<body>
    <script>
      var vm = new Vue({
        data: {
          a: 1,
          b: 2,
          c: {
            name: "JohnZhu"
          }
        },
        watch: {
          a: function (val, oldVal) {
            console.log(new a: %s, old a: %s, val, oldVal)
          },
          // 方法名
          b: someMethod,

          // 深度 watcher, 检测到变化,并打印出c.name变化前后的结果
          // ‘c.name‘: {
          //   handler: function (val, oldVal) { 
          //     console.log(‘new c: %s, old c: %s‘, val, oldVal);
          //   },
          //   deep: true
          // },

          // 报错 必须用c.name,否则在data下不能直接找到name
          // name: function () {
          //   console.log(‘new c: %s, old c: %s‘, val, oldVal);
          // }

          // 报错,键值必须是一个字符串,所以用引号括起来
          // c.name: {
          //   handler: function (val, oldVal) {
          //     console.log(‘new c: %s, old c: %s‘, val, oldVal);
          //   },
          //   deep: true
          // }

          // 这里未检测到变化
          // c : {
          //   handler: function (val, oldVal) { 
          //     console.log(‘new c: %s, old c: %s‘, val, oldVal);
          //   },
          //   deep: false
          // },
         
          // 成功检测到变化 
          // c : {
          //   handler: function (val, oldVal) { 
          //     console.log(‘new c: %s, old c: %s‘, val, oldVal);
          //   },
          //   deep: true
          // },

          // 检测不到变化,因为参数 deep 的默认值是false
          // c : {
          //   handler: function (val, oldVal) { 
          //     console.log(‘new c: %s, old c: %s‘, val, oldVal);
          //   },
          // },
        },
        methods: {
          someMethod: function () {
            alert("b is changed");
          }
        }
      })
      vm.a = 2; // new: 2, old: 1
      vm.b = 666; // alert 666
      vm.c.name = "HTT";
    </script>
</body>
</html>

 

函数执行之后,分别在控制台中打印出new: 2, old:1 以及 alert 666。 

  • 可以看出, watch函数的参数中,第一个是改变之前的值,第二个是改变之后的值, 这两个参数非常有用。
  • 这里分别使用了 三种定义函数(或option)的方法。
  • 如果要观察data下一个对象的属性,我们可以使用 ‘对象.属性‘ 的方式, 注意: 一定要要引号。
  • 如果改变了一个对象的属性,就必须使用 deep: true, 否则检测不到变化。 

 

 

 

 

  

 

  

 

 

 

 

 

 

 

https://cn.vuejs.org/v2/api/#watch

http://www.jianshu.com/p/ffe50c5e3368

http://www.cnblogs.com/dupd/p/5887907.html

https://cn.vuejs.org/v2/guide/computed.html#Computed-属性-vs-Watched-属性

vue中watch的使用

标签:cdn   his   重要   第一个   style   不能   change   new   www   

原文地址:http://www.cnblogs.com/zhuzhenwei918/p/6921053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!