zoukankan      html  css  js  c++  java
  • 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>
    
    
  • 相关阅读:
    【总结】java 后台文件上传整理
    【很重要】优秀的常用的js库
    封装常用的跨浏览器的事件对象EventUtil
    [H5表单]一些html5表单知识及EventUtil对象完善
    [H5表单]html5自带表单验证体验优化及提示气泡修改
    html5的audio实现高仿微信语音播放效果
    pcre
    tony_nginx_01_如何在linux系统下安装nginx、pcre、zlib、openssl工具
    Linux中编译、安装nginx
    Linux在本地使用yum安装软件
  • 原文地址:https://www.cnblogs.com/zero-zm/p/12102668.html
Copyright © 2011-2022 走看看