美文网首页
methods、watch、computed之间的差别对比以及适

methods、watch、computed之间的差别对比以及适

作者: 神奇作手 | 来源:发表于2019-11-29 10:15 被阅读0次

    一、概述

    methods, watch和 computed都是以函数为基础的,但各自却都不同;

    二、区别

    1、computer

    当页面中有某些数据依赖其他数据进行变动的时候,可以使用计算属性。

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

    需要注意的是,就算在data中没有直接声明出要计算的变量,也可以直接在computed中写入。

    计算属性默认只有getter,可以在需要的时候自己设定setter:

    // ...
        computed: {
            fullName: {
                // getter
                get: function () {
                    return this.firstName + ' ' + this.lastName
                },
                // setter
                set: function (newValue) {
                    var names = newValue.split(' ')
                    this.firstName = names[0]
                    this.lastName = names[names.length - 1]
                }
            }
        }
    

    这个时候在控制台直接运行vm.fullName = ‘xiao liu’,相应的firstName和lastName也会改变。

    适用场景:
    2、watch

      watch和computed很相似,watch用于观察和监听页面上的vue实例,当然在大部分情况下我们都会使用computed,但如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。

    直接引用文档例子:

    var vm = new Vue({
            el: '#app',
            data: {
                firstName: 'Foo',
                lastName: 'Bar',
                fullName: 'Foo Bar'
            },
            watch: {
                firstName: function (val) {
                    this.fullName = val + ' ' + this.lastName
                },
                lastName: function (val) {
                    this.fullName = this.firstName + ' ' + val
                }
            }
        })
    

    如果在data中没有相应的属性的话,是不能watch的,这点和computed不一样。

    适用场景:
    3、methods

      方法,跟前面的都不一样,我们通常在这里面写入方法,只要调用就会重新执行一次,相应的有一些触发条件,在某些时候methods和computed看不出来具体的差别,但是一旦在运算量比较复杂的页面中,就会体现出不一样。

      需要注意的是,computed是具有缓存的,这就意味着只要计算属性的依赖没有进行相应的数据更新,那么computed会直接从缓存中获取值,多次访问都会返回之前的计算结果。

    总结:

    • 在 computed和 watch方面,一个是计算,一个是观察,在语义上是有区别的。
    • 计算是通过变量计算来得出数据。而观察是观察一个特定的值,根据被观察者的变动进行相应的变化,在特定的场景下不能相互混用,所以还是需要注意api运用的合理性和语义性。

    相关文章

      网友评论

          本文标题:methods、watch、computed之间的差别对比以及适

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