computed属性与methods、watched

一、计算属性

new Vue({

    data: {
        message: ‘hello vue.js !‘
    },

    computed: {
        reverseMessage: function () {
            return this.reverseMessage.split(‘‘).reverse().join(‘‘);
        }
    }
});

标签使用:

<span>Reversed Message: {{ reverseMessage }}</span>

结果: Reversed Message: ! sj.euv olleh

计算属性的使用是为了避免插值中使用复杂的计算而导致难以维护。

使用计算属性可以将最终的结果值放入到插值中去显示

还可以通过 vm.reverseMessage 来直接调用获取其值,由于 compted:{} 中 reverseMessage 的结果是与 vm.message 绑定的,因此只要message 发生变化其值也会立即发生变化。

二、Methods

组件中有个属性专门用来定义组件内所使用到的方法,即:methods,对象类型。

比如上面的例子:

new Vue({

    data: {
        message: ‘hello vue.js !‘
    },

    computed: {
        reverseMessage: function () {
            return this.reverseMessage.split(‘‘).reverse().join(‘‘);
        }
    },

    methods: {
        reverseMessage: function () {
            return this.reverseMessage.split(‘‘).reverse().join(‘‘);
        }
    },
});

三、计算属性和 methods区别

计算属性和 methods 最大的区别就在于缓存机制。

method每调用一次就计算一次;computed只在msg更新时计算,计算结果存在缓存中。

计算属性是作为属性来使用的,只要其依赖的数据没发生变化它也不应该会有所变化(虽然其实现还是以函数形式),而对于 methods 其实是以函数形式定义并以函数形式调用,既然每次都是函数调用形式去获取值,那肯定会每次调用都会重新计算得出最新值返回。

两者使用场景:

  1. 计算属性:可以应对大型数据计算并且一般不会发生变动的数据,这样就避免了每次想要获取需要经过大量计算而又不会经常发生变化的值导致的每次都需要重新计算,消耗性能;
  2. methods:适用于数据变化性比较大,经常变动的内容,也可替代计算属性来使用。

四、Computed 属性 vs Watched 属性

计算属性和观察属性区别在于,观察属性一次只能观察一个属性然后针对该属性的变化做出响应,而计算属性却不一样,它可以同时检测几个属性,通过这几个属性的值返回计算的结果。

比如:(分别通过观察属性和计算属性来实现:更新人物姓名)

1、Watched 属性

var data = { 

    firstName: ‘li‘,
    lastName: ‘zc‘,
    fullName: ‘lizc‘,
};
// 观察属性,观察的属性发生变化,会做出响应(比如:改变其他属性的值)
watch: {
    firstName: function (newValue) {
        console.log(‘firstName ---------- new: ‘ + newValue);
        this.fullName = newValue + ‘ ‘ + this.lastName;
    },

    lastName: function (newValue) {
        console.log(‘lastName ---------- new: ‘ + newValue);
        this.fullName = this.firstName + ‘ ‘ + newValue;
    },
},

这里对 firstName 和 lastName 分别进行了观察,一旦有改变发生,就会去更新全名:fullName 值;

2、计算属性

通过计算属性的特性:只要被绑定的属性值不发生变化计算结果就不会变,被绑定的属性发生变化计算结果会根据变化后的最新值去计算最新的结果。

可以更方便的去实现上面通过 watch 属性来刷新全名的功能。

// 数据
var data = { 

    firstName: ‘li‘,
    lastName: ‘zc‘,
    // fullName: ‘lizc‘, 这里就不需要设置这个属性了,直接从计算属性结果中获取
};
// 计算属性,只要绑定的属性不变,会先使用缓存的值
computed: {

    fullName: function () {
        return this.firstName + ‘ ‘ + this.lastName;
    },
},

3、两者通用的标签书写方式:

<h1>Compted 属性 vs Watched 属性</h1>
<label>Fist Name: </label><input type="text" v-model="firstName"><br/>
<label>Last Name: </label><input type="text" v-model="lastName"><br/>
<label>计算属性:</label><span>{{ fullName }}</span><br/>
<label>观察属性:</label><span>{{ fullName }}</span><br/>

上面的计算和观察属性中的 fullName 有所不同

前者标签内的 fullName 插值使用的是 compted 属性中的 fullName

后者标签内的 fullName 插值使用的是 data 数据中的 fullName 属性;

最终结果其实都是一样的,见效果图:

五、计算属性的 setter

默认情况下计算属性是只有 getter 的,但是我们可以自己添加 setter

比如:

需要注意的是,这里 fullName 不能再是函数声明形式了,而需要采用对象方式

// 为计算属性添加 setter
fullName: { // fullName: function (){} => fullName: {}

    get: function () {
        return this.firstName + ‘ ‘ + this.lastName;
    },

     set: function (newValue) {
        var name = newValue.split(‘ ‘);

        this.firstName = name[0];
        this.lastName = name[name.length - 1];
     }

    // return this.firstName + ‘ ‘ + this.lastName;
},

这样我们也可以通过 vm.fullName = ‘li zc 方式去修改绑定的属性了。

setter 里面可以做一些自定义的需求等等。

计算属性有个好处就是,可以同时检测多个属性并且可以根据这多个属性通过一定方式计算得出结果。

原文地址:https://www.cnblogs.com/phoebeyue/p/9217511.html

时间: 2024-08-04 13:35:31

computed属性与methods、watched的相关文章

sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务

有时候遇到这么个需求,输入框为空的时候,请求一遍接口,如果输入框不为空的时候,需要点击搜索按钮请求接口. 一.使用computed属性的实时监控计算 我第一反应是做一个computed属性监控这个输入框的值,一旦监控发现值为空,我就重新执行一遍请求的方法. <el-col :xs="8" :sm="8" :md="4" :lg="4" :xl="4"> <el-input v-model=

对vue中的computed属性,watch监听,计算属性理解

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

Vue的computed属性

computed属性:计算属性 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,

computed 与methods , watched 的区别

computed 与watched 的区别: 异步请求 数据变化 使用watched ,计算属性不支持异步 计算一个值的结果 用 computed computed 与methods的区别: computed 有缓存 当数据的值没有改变的时候 我们不会重新执行方法,而 methods 会 原文地址:https://www.cnblogs.com/guangzhou11/p/11494872.html

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 2.0 深入源码分析(六) 基础篇 computed 属性详解

用法 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护,比如: <div id="example">{{ message.split('').reverse().join('') }}</div> <script> var app = new Vue({ el:'#example', data:{message:'hello world'} }) </script> 这样模板不再是简

vue实例的computed属性

注意点:计算属性一般看成是属性,所以写在差值表达式中可以看成属性变量直接使用, 而不必像一般函数那样需要加上小括号”( )” 与methods的区别:在model数据不变的情况下,计算属性只触发调用一次,而methods只要每次触发,都会重新调用. 原文地址:https://www.cnblogs.com/chujunqiao/p/11624349.html

VueJS计算属性: computed

computed属性 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title> <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script> </h

vue中的computed和methods的区别

computed是计算属性的意思,我们在得到最后结果的时候可以使用computed 例如:<input type="checkbox" v-model="checkAll">computed: {checkAll: {// 当数据变化时会重新计算(取值)get() {return this.tableData.every(item => item.isSelect)},// val给checkbox赋值时set(val) {this.tableDa