欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue 监听对象属性变化

程序员文章站 2022-05-17 20:05:54
...

今天看文章 遇到了这个问题,就用代码验证下,亲测有效。

<template>
  <div id="app">
      <span>
        {{ msg }}
      </span>
      <p>{{ person.name}}年龄是{{ person.age }}岁</p>
  </div>
</template>

<script>
export default {
  name: 'App',
  data(){
    return{
      msg:'初始化值',
      person:{
          name:'李大侠',
          age:30
      }
    }
  },
  created(){
    this.changeAge();
  },
  methods: {
    changeAge(){
      setInterval(() => {
        this.person.age++
         this.msg='初始化值'+new Date().toString()
      }, 1000);
    }
  },
  watch:{
    person:function(){
      console.log('对象发生变化----------------------------')
    }
  }
}
</script>

此时的结果是模板内容虽然发生了变化,但是监控的person对象并没有输出,原因就是只改变了属性值。
下面就说一下监控属性值变化的方法
方法一:
直接监控对象属性

 watch:{
    'person.age':function(){
        console.log('年龄发生变化')
    }
  }`

方法二:
利用计算属性达到目的

<template>
  <div id="app">
      <span>
        {{ msg }}
      </span>
      <p>{{ person.name}}年龄是{{ ageChange }}岁</p>
  </div>
</template>

此处省略。。。
computed:{
    ageChange:function(){
      return this.person.age  
       //当age 发生变化的时候,就会重新计算,任何使用watch进行监控
    }
  },
watch:{
    ageChange:function(){
      console.log('年龄发生变化============')
    }
  }