美文网首页
Vue 的 watch 原来可以这样监听数据

Vue 的 watch 原来可以这样监听数据

作者: 酷酷的凯先生 | 来源:发表于2020-06-18 18:44 被阅读0次

watch 的作用可以监控一个值的变换,并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态,通常有三种写法写法。

第一种: 普通用法

export default {
  data: {
    testName: 'testNameTxt'
  },
  watch: {
    testName(newName, oldName) {
      // ... do something
      this.nameChange();
    }
  },
  methods:{
    nameChange(){
      // ... do something
    }
  }
}

直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。
也可以在所监听的数据后面直接加字符串形式的方法名:

export default {
  data: {
    testName: 'testNameTxt'
  },
  watch: {
    testName: 'nameChange'
  },
  methods:{
    nameChange(){
      // ... do something
    }
  }
}

第二种: immediate 和 handler

如第一种使用 watch 时有一个特点 : 当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。

如果我们需要在最初绑定值的时候也执行函数,又该怎么办呢 ?
这时就需要用到 immediate 属性。

举个栗子

比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时需要将 immediate 设为 true 即可。

export default {
 data: {
   testName: 'testNameTxt'
 },
 watch: {
   testNam{
     handler(newName, oldName) {
        // ... do something
        this.nameChange();
     },
     immediate: true
   }
 },
 methods:{
   nameChange(){
     // ... do something
   }
 }
}

监听的数据后面写成对象形式,包含 handler 方法和 immediate,之前我们写的函数其实就是在写这个 handler 方法;

immediate 表示在watch中首次绑定的时候,是否执行 handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler

让 handler 指向 methods 中的方法

watch: {
    studen: {
        handler: 'sayHello',
        immediate: true  // 创建组件后立即执行一次
    }
},
methods: {
    sayHello() {
        console.log(this.studen)
    }
}

触发多个监听方法,使用数组可以设置多项,形式包括字符串、函数、对象

watch: {
    name: [
        'sayHello1',
        function(newVal, oldVal) {
            // ...
        },
        {
            handler: 'sayHello2',
            immaediate: true
        }
    ]
},
methods: {
    sayHello1() {
        console.log('sayHello1==>', this.name)
    },
    sayHello2() {
        console.log('sayHello2==>', this.name)
    }
}

第三种: deep 深度监听

当需要监听一个对象的改变时,普通的 watch 方法无法监听到对象内部属性的改变,只有 data 中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

export default {
  data: {
    testObj: {name:'test', age:18}
  },
  watch: {
    testObj: {
      handler(newName, oldName){
        // ... do something
        this.nameChange();
      },
      deep: true,
      immediate: true
    }
  },
  methods:{
    nameChange(){
      // ... do something
    }
  }
}

设置 deep: true 则可以监听到 testObj.name 的变化,此时会给 testObj 的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行 handler
如果只需要监听对象中的一个属性值,还可以这样写(使用字符串的形式监听对象属性):

export default {
  data: {
    testObj: {name:'test', age:18}
  },
  watch: {
    'testObj.name': {
      handler(newName, oldName){
        // ... do something
        this.nameChange();
      },
      deep: true,
      immediate: true
    }
  },
  methods:{
    nameChange(){
      // ... do something
    }
  }
}

好啦, watch的三种使用方法到这就结束了, 希望能帮助到你呦, 欢迎点赞, 留言~

相关文章

  • Vue 的 watch 原来可以这样监听数据

    watch 的作用可以监控一个值的变换,并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态,通常有...

  • vue监听和webpack基本使用

    vue监听 使用keyup监听 使用watch监听文本框变化,watch 使用这个属性可以监视data中的数据变化...

  • Vue的watch和computed属性

    Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 可以从上述代码中实践得知,输入...

  • 微信小程序之watch属性值(仿Vue)

    Vue通过监听watch属性来观测Vue实例数据的变化。 监听器的原理,将data中需监听的属性写在watch对象...

  • Vue 父组件获取数据数据,子组件第一次props获取不到(使用

    大家都知道,Vue项目中对数据的监听,提供了一个很好的钩子watch,watch可以极其方便的监听我们常用数据类型...

  • Vue.js 监听属性

    介绍下Vue.js监听属性watch,我们可以通过watch来响应数据的变化。以下实例通过使用watch实现计数器...

  • vue 遇到的坑

    一、watch监听数据 1、监听普通的变量 1、vue.js里面直接用watch监听对象变量,如果对象变量的属性发...

  • vue的vuex订阅

    vue本身内置了watch函数,可以很方便的用来监听数据的变更,包括vuex数据的变更. 但是,这都是基于vue文...

  • vue中watch详解(转)

    vue中,watch用来监听数据变化。如:需要监听输入框数据变化来实时进行搜索等。简单的写法: 函数名也可以通过字...

  • vue watch对象内的属性监听

    vue可以通过watch监听data内数据的变化。通常写法是: 但是如果你要监听的数据是对象内的某一属性,直接wa...

网友评论

      本文标题:Vue 的 watch 原来可以这样监听数据

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