zoukankan      html  css  js  c++  java
  • 2020.10.13 vue中watch和computed属性的区别

    既能用computed 实现又可以用 watch 监听来实现的功能,推荐用 computed,重点在于 computed 的缓存功能

    computed计算属性是用来声明式的描述一个值依赖了其它的值,当所依赖的值或者变量改变时,计算属性也会跟着改变;

    watch 监听的是已经在 data 中定义的变量,当该变量变化时,会触发 watch 中的方法;

    1. computed 根据一个现有数据去生成一个新数据,并且这两个数据会永久的建立关系,还会建立缓存,当无关数据改变的时候,不会重新计算而是直接使用缓存中的值

    fullName 不需要在 data 中声明

    <div id="app">
      <p>{{fullName}}</p>
    </div>
     
    <script>
      var vm = new Vue({
        el: '#app',
        data: {
          firstName: 'yao',
          lastName: 'lei'
        },
        computed: {
          fullName() {
            return this.firstName + this.lastName
          }
        }
      })
    </script>

    2.watch 更像是一个 data 的数据监听回调,当依赖的 data 的数据变化,执行回调,在方法中会传入 newVal 和 oldVal。可以提供输入值无效,提供中间值 特场景。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。如果你需要在某个数据变化时做一些事情,使用watch。

    watch监听的是data中定义的变量

    <template>
      <div class="hello">
          {{fullName}}
          <button @click="setNameFun">click</button>
      </div>
    </template>
     
    <script>
    export default {
        data() {
            return {
                firstName: '',
                lastName: ""
            }
        },
        props: {
          msg: String
        },
        methods: {
            setNameFun() {
                this.firstName = "";
                this.lastName = ""
            }
        },
        computed: {
            fullName() {
                return this.firstName + ' ' + this.lastName
            }
        },
        watch: {
            firstName(newval,oldval) {
              console.log(newval)
              console.log(oldval)
            }
        }
    }
    </script>

    总结: 

    1.如果一个数据依赖于其他数据,那么把这个数据设计为computed的  

    2.如果你需要在某个数据变化时做一些事情,使用watch来观察这个数据变化

     

      

  • 相关阅读:
    FactoryBean的作用
    ztree点击文字勾选checkbox,radio实现方法
    js判断字符长度 汉字算两个字符
    双系统引导修复
    thinkpadT440p
    分布式服务器集群
    Eclipse插件安装方式
    用SourceTree轻巧Git项目图解
    廖雪峰git使用完整教程
    hessian
  • 原文地址:https://www.cnblogs.com/yaolei0422/p/13809585.html
Copyright © 2011-2022 走看看