vue中computed和watch

computed 计算属性

能够监听vue数据上的变化,页面上来就执行一次,每改变一次数据就又触发。在操作数据的时候,会派生出另一个事情

get是获取的时候执行的操作。set是修改时候执行的操作

应用场景:

比如在用户输入框改变数据的时候过滤数字;

通过数据的变化,来进行累计;

通过单选按钮的变化,来进行判断是否全选等等

优点:指定看哪个数据,就只看哪个数据

PS:需要注意的是  函数名,不要和data中的数据一样。

<div id="app">
        全选
        <input type="checkbox" v-model="all">
        <hr>
        <input type="checkbox" v-for="(val,key) in arr" v-model="val.checked">{{arr}}
</div>
 new Vue({
        el:‘#app‘,
        data:{
            arr:[
                {checked:true},
                {checked:false},
                {checked:false},
                {checked:true}
            ]
        },
        //当使用get和set时候,computed中定义的属性为一个对象
        //当不使用get和set时候,computed中定义的属性可以是一个函数
        computed:{
           /*
            all(){
                return this.arr.every(e=>e.checked);
            }
           */
            all:{
                get(){
                    //获取的时候执行的操作
                   return this.arr.every(e=>e.checked);
                },
                set(newVal){
                    //修改时候执行的操作。其中newVal 是改变之后的结果
                    return this.arr.forEach(e=>e.checked = newVal)
                }
            }
        }

    });

watch 指定数据监听器

当指定数据发生变化时候触发。一开始不会触发,只有指定的数据发生变化就又触发一次

第一种写法:

watch:{

  要监听的数据名(新的数据,旧的数据){

  //只能监听一层,两层或者深层监听不到,需要deep为true(深度监听)

  }

}

第二种写法

watch:{

  要监听的数据名(新的数据,旧的数据){

  handler(){

    //执行的操作

  },

  deep:true

  }

}

应用场景:

种localStorage的时候,深度添加等等

 <div id="app">
       <input type="text" v-model="val">
       <ul>
           <li v-for="(val,key) in arr">
               <input type="checkbox" v-model="val.checked">
           </li>
       </ul>
       {{arr}}
 </div>
new Vue({
        el:‘#app‘,
        data:{
            val:‘hao123‘,
            arr:[
                {checked:true},
                {checked:false},
                {checked:false},
                {checked:false}
            ]

        },
        watch:{
            arr:{
                handler(v){
                    localStorage.setItem(‘data‘,JSON.stringify(v))
                },
                deep:true
            }
        }

    });
    function getStorage(name){
        //存储到本地
        let data = localStorage.getItem(name) || ‘[{"checked":false},{"checked":false},{"checked":false}]‘;
        return  JSON.parse(data); //[] -> [{}]
    }

总结:computed和watch都起到监听一个数据,并进行处理的作用

computed主要用于对同步数据的简单处理,watch则主要用于数据输入时异步操作或者开销较大的情况

computed在监听数据变化时候,上来就会执行一次。而watch页面上来是不会执行的,只有指定数据发生变化才会触发

computed具有缓存性,值不变化会读取缓存,watch无缓存性,值不变化也会执行

原文地址:https://www.cnblogs.com/theblogs/p/10353771.html

时间: 2024-08-30 16:00:20

vue中computed和watch的相关文章

Vue中computed VS watch 区别 及computed VS method区别

computed VS watch 先来看官网中对计算属性(computed)的解释: 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护. 详情见官网URL https://cn.vuejs.org/v2/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7 官网中对侦听器(watch)的解释: 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器.这就是为什么 Vue

vue中computed和watch的用法

computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理: computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化,举例:购物车里面的商品列表和总金额之间的关系,只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化.这里的这个总金额使用computed属性来进行计算是最好的选择 wa

vue中computed计算属性与methods对象中的this指针

this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和computed中的成员为实现化对象属性了,而methods中定义的方法为实现化对象方法了.这时this指针指向的是这个实现化对象. let v = new Vue({ el: '.test', data: { title: "121213" }, methods: { msg() { al

Vue中computed和watch的区别

目录 计算属性computed 侦听属性watch @(目录) 计算属性computed 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,多对一或者一对一,一般用computed 不支持异步,当computed内有异步操作时无效,无法监听数据的变化 支持缓存,只有依赖数据发生改变,才会重新进行计算 computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过的数据通过计算得到的 如果computed属性属性值是函数,那么默认会走get方法:

Vue中Computed和Watch的用法及区别

一. 计算属性(computed) 1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷. 例如: <p id="app"> {{ myname.substring(0,1).toUpperCase() + myname.substring(1) }} </p> 运算过于复杂,冗长,且不好维护,因此我们对于复杂的运算应该 使用计算属性的方式去书写. 因此可改写为: <body> <div id="app"

vue中computed、methods、watched比较

一.computed和methods对比 computed是状态(data)改变时,重新进行计算:methods是计算函数,每次重新渲染都会重新计算.比如return Date.now(),computed不会变化,methods则会更新. 1.计算属性(computed)是基于它们的依赖进行缓存的: 2.我们为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A ,它需要遍历一个极大的数组和做大量的计算.然后我们可能有其他的计算属性依赖于 A .如果没有缓存,我们将不可避免的多次执行 A

vue中computed和watch的区别,以及适用场景

computed:通过属性计算而得来的属性 1.computed内部的函数在调用时不加(). 2.computed是依赖vm中data的属性变化而变化的,也就是说,当data中的属性发生改变的时候,当前函数才会执行,data中的属性没有改变的时候,当前函数不会执行. 3.computed中的函数必须用return返回. 4.在computed中不要对data中的属性进行赋值操作.如果对data中的属性进行赋值操作了,就是data中的属性发生改变,从而触发computed中的函数,形成死循环了.

vue中的各种属性

data new vue({ data:{ 'a':1 } }) 是一个实例,data直接是一个对象 vue.component('my',{ template:'', props:['title'], data: function() { return { 'a':1 } } }) 是组件注册,data 返回一个函数.组件是一个相对独立的个体,如果data直接是一个对象的话,一个组件被多次使用时,属性会相互影响.所以使用一个有返回值的函数来解决这个问题. prop Prop 是你可以在组件上注

vue中methods、computed、watch区别

vue中methods.computed.watch区别methods:事件调用的钩子 computed:{ // 计算属性是根据他依赖的值计算的,当依赖值发生变化,其跟着改变 // 计算属性是依赖缓存} watch: { // watch 和 computed 区别: // watch 强调的是 观测某个状态,根据状态的改变而做事情 // 而computed 强调的是 根据状态返回一个新的状态} 原文地址:https://www.cnblogs.com/houjl/p/10127451.htm