Vue中Computed和Watch的用法及区别

一、 计算属性(computed)

1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷。

例如:

<p id="app">
        {{ myname.substring(0,1).toUpperCase() + myname.substring(1) }}
</p>

运算过于复杂,冗长,且不好维护,因此我们对于复杂的运算应该 使用计算属性的方式去书写。

因此可改写为:

<body>
    <div id="app">
        {{ changewords }} // 渲染 不用写()
    </div>
</body>
<script>
    var vm = new Vue({
            el: "#app",
            data:{},
         // 计算属性
            computed:{
                changewords(){
                    return this.myname.substring(0,1).toUpperCase() + this.myname.substring(1)
               }
            }
     })
</script>

总结:

1.变量不在 data中定义,而是定义在computed中,写法跟写方法一样,有返回值。函数名直接在页面模板中渲染,不加小括号 。

2.根据传入的变量的变化 进行结果的更新。

3.计算属性基于响应式依赖进行缓存。如其中的任意一个值未发生变化,它调用的就是上一次 计算缓存的数据,因此提高了程序的性能。而methods中每调用一次就会重新计算 一次,为了进行不必要的资源消耗,选择用计算属性。

计算属性模糊查询的例子:

<body>
    <div id="app">
        <input type="text" v-model="mytext">
        <ul>
            <li v-for="data in datalistcom" :key="data">
                {{ data }}
            </li>
        </ul>
    </div>
</body>
<script>
    var vm = new Vue({
      el: "#app",
        data:{
            datalist:["aaa","bbb","ccc","ddd","aa","a","cc","dd"],
            mytext:‘‘
        },
        computed:{
            datalistcom(){
                return this.datalist.filter(item=>item.indexOf(this.mytext)>-1)
            }
        }
    })
</script>

  

二、监听属性(watch)

上面说到计算属性的时候 初始化的时候就可以被监听到并且计算 但是watch是发生改变的时候才会触发。

当你有一些数据需要随着其它数据变动而变动时,或者当需要在数据变化时执行异步或开销较大的操作时,你可以使用 watch。

例子 :

<body>

    <div id="app">

        <p>单价:<input type="text" v-model="price"></p>

        <p>数量:<input type="text" v-model="number"></p>

        <p>计算金额:{{sum}}</p>

    </div>

</body>

<script>

var vm  = new Vue({

    el:"#app",

    data:{

        price:100,

        number:1,

        sum:0

    },

    //监听某一个值或者状态发生变化 变化就会触发watch 

    watch:{

        // 监听的参数的名字要一致

        price(){

            console.log(this.price)

            if(this.price*this.number < 1000 && this.price*this.number > 0){

                this.sum = this.price*this.number + 100

            }else{

                this.sum = this.price*this.number

            }

        },

        number(){

            console.log(this.price)

            if(this.price*this.number < 1000 && this.price*this.number > 0){

                this.sum = this.price*this.number + 100

            }else{

                this.sum = this.price*this.number

            }

        }

    }

})

</script>

计算属性 和属性监听的区别:

1.计算属性变量在computed中定义,属性监听在data中定义。

2.计算属性是声明式的描述一个值依赖了其他值,依赖的值改变后重新计算结果更新DOM。属性监听的是定义的变量,当定义的值发生变化时,执行相对应的函数。

原文地址:https://www.cnblogs.com/mo3408/p/12360940.html

时间: 2024-10-07 07:04:10

Vue中Computed和Watch的用法及区别的相关文章

vue中computed和watch的用法

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

【Java学习笔记之二十九】Java中的&quot;equals&quot;和&quot;==&quot;的用法及区别

Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 System.out.println(str1==str2); 4 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一

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 计算属性 能够监听vue数据上的变化,页面上来就执行一次,每改变一次数据就又触发.在操作数据的时候,会派生出另一个事情 get是获取的时候执行的操作.set是修改时候执行的操作 应用场景: 比如在用户输入框改变数据的时候过滤数字: 通过数据的变化,来进行累计: 通过单选按钮的变化,来进行判断是否全选等等 优点:指定看哪个数据,就只看哪个数据 PS:需要注意的是  函数名,不要和data中的数据一样. <div id="app"> 全选 <input

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、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中jsx的最简单用法

最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"> hello <p>world</p> </div> 主页面 parent.vue <template> <div class="hello"> <vue-test :typeSpan="typeSpan&q