• Vue 计算属性computed和监听属性watch比较


    1、计算属性

    介绍:

    • 避免在模板中使用冗余代码处理data中的数据
    • 当依赖的data对象中的属性值发生变化时,将会触发计算方法,在data对象中生成新的变量,并且会将新的变量缓存起来;(只要依赖的data对象属性值不发生改变,将不会触发计算方法;)
    • 可以用计算属性实现的,也就可以用方法methods实现,但是methods性能不如computed高;因为methods每次渲染后都会被调用,而computed只要响应式依赖(data中的属性)没有发生改变,将不会重新计算,并且计算后会重新被缓存;
    • 同样,可以用计算属性实现的,也就可以用侦听器watch实现,只要所依赖的相应数据不是频繁变化,开销不大的时候,就是用计算属性,反之用监听器;
    • 计算属性不需要再data中进行定义;

    使用:

    (1)、监听firstName和lastName计算fullName
    <template>
        <div>{{fullName}}</div>
    </template>
    <script>
        export default {
            data() {
                return { 
                 firstName: "wang",
                 lastName: "wu"
                }
            },
            computed: {
                fullName: function () { // 监听data中的firstName和lastName值的变化, 得到新变量fullName,且fullName不需要再data中定义
                    return this.firstName + "-" + this.lastName;
                }
            }
        }
    </script>
    
    (2)、使用setter和getter方法
    <template>
        <div>firstName: {{firstName}}</div>
        <div>lastName: {{lastName}}</div>
        <div>{{fullName}}</div>
        <a @click="changeValue">更改</a>
    </template>
    <script>
        export default {
            data() {
                return {
                firstName: "wang",
                lastName: "wu"
        }
            },
            computed: {
                fullName: { // 监听data中的firstName和lastName, 得到新变量fullName
                   get: function() {
                        return this.firstName + "-" + this.lastName;
                    } ,
                    // set方法作用:通过参数修改计算的依赖属性firstName和lastName值
                    set: function(newValue) { 
                        this.firstName = newValue[0];
                        this.lastName = newValue[newValue.length-1];
                    }
                }
            },
            methods:  {
                changeValue() {
                    // 调用计算属性的set方法,修改firstName和lastName
                    this.fullName="yyyyy";
                }
            }
        }
    </script>
    
    

    2、侦听器

    介绍:

    • 用于侦听变化较为频繁,开销较大的数据;
    • 监听的变量需要在data中进行定义;

    使用:

    <template>
        <input type="text" v-model="question" />
    </template>
    <script>
        export default {
            data() {
                return {
                question: "",
                answer: ""
        }
            },
           watch: {
               question: function () { // 监听question值的变化, 只要question发生变化,这个函数将会被执行;
                    this.answer="---------------------";
                    this.getAnswer();
                }
            },
            methods: function() {
                getAnswer() {
                    console.log("question属性值发生变化了。。。");
                }
            }
        }
    </script>
    
    
  • 相关阅读:
    vue中mixins(混入)的使用
    js实现淘宝轮播图放大镜效果
    vue中的provide和inject
    vue自定义过滤器
    vue自定义指令
    HTTP和HTTPS详解
    可靠的TCP连接为何是三次握手和四次挥手
    跟着动画来学习TCP三次握手和四次挥手
    简单了解TCP/IP与HTTP
    网络协议
  • 原文地址:https://www.cnblogs.com/zero-zm/p/12102668.html
Copyright © 2020-2023  润新知