vue的方法和计算属性的区别
首先看看 methods 方法
// html
<div id="vue">
<button v-on:click = "a++">add to a</button>
<button v-on:click = "b++">add to b</button>
<p>a : {{a}}</p>
<p>b : {{b}}</p>
<p>age : {{age}}</p> <-- 使用methods方法 -->
<p>age + a = {{addtoa()}}</p>
<p>age + b = {{addtob()}}</p>
<p>cc = {{cc()}}</p>
</div> // js
new Vue({
el : "#vue", data : {
a : 0,
b : 0,
age : 20,
}, methods: {
addtoa() {
console.log("使用了addtoa 方法");
return this.a + this.age;
},
addtob() {
console.log("使用了addtob 方法");
return this.b + this.age;
},
cc() {
console.log('使用了 cc 方法');
return 'cc';
},
},
})
浏览器打开查看控制台,显示如下

接着点击第一个按钮 ‘ add to a ’,控制台显示如下

点击 ‘ add to a ’,只是让 a 的值加 1,而其他值都没有变化,但发现不是只有 与 a 值有关联的 addtoa 方法执行,而是 methods 里的所有方法都执行了。接着再点击 ‘ add to b ’,你也会发现所有方法都执行了
再看看 computed 计算属性
// html
<div id="vue">
<button v-on:click = "a++">add to a</button>
<button v-on:click = "b++">add to b</button>
<p>a : {{a}}</p>
<p>b : {{b}}</p>
<p>age : {{age}}</p> <!-- 使用computed计算属性,注意没有括号 -->
<p>age + a = {{addtoa}}</p>
<!-- 注意这里又计算了一次 addtoa -->
<p>age + a = {{addtoa}}</p>
<p>age + b = {{addtob}}</p>
<p>cc = {{cc}}</p>
</div> // js
new Vue({
el: "#vue", data: {
a: 0,
b: 0,
age: 20,
}, computed : {
addtoa() {
console.log("使用了addtoa 属性")
return this.a + this.age;
},
addtob() {
console.log("使用了addtob 属性")
return this.b + this.age;
},
cc() {
console.log('使用了 cc 属性')
return 'cc'
},
},
})
浏览器打开查看控制台,显示如下

接着点击第一个按钮 ‘ add to a ’,控制台显示如下

发现 html 中明明写了两次 addtoa 属性,但是一开始只打印了一行 ‘ 使用了addtoa 属性 ’,而且当改变 a 值后,只有与数据有关的属性 即 addtoa 才重新计算了,而且同样也是只打印一行 ‘ 使用了addtoa 属性 ’
总结
两个例子中函数被定义成 方法 或 属性,就最终结果上来看其实都是一样的
但是计算属性是基于响应式依赖进行缓存的,只有数据发生变化时,才会重新计算,否则直接调用缓存
因此计算属性 相比 methods 方法更加的节省性能
对于任何复杂的逻辑,都应该使用计算属性
vue的方法和计算属性的区别的更多相关文章
- Vue(十一)计算属性
计算属性 1. 基本用法 计算属性也是用来存储数据,但具有以下几个特点: a.数据可以进行逻辑处理操作 b.对计算属性中的数据进行监视 2.计算属性 vs 方法 将计算属性的get函数定义为一个方法也 ...
- vue.js初探:计算属性和methods
在vue.js中,计算属性和methods方法的函数相同时,两者的最终执行结果都是相同的.然而不同的是,计算属性是基于它的依赖缓存.计算属性只有在它的相关依赖发生改变时才会重新取值.这就意味着只要 m ...
- Vue-比较方法、计算属性和侦听器
分别用方法.计算属性和侦听器实现当fristName和lastName改变时,fullName跟着改变. 一.方法: html: <div id="app"> {{fu ...
- Vue.js系列之四计算属性和观察者
一.计算属性 1.模版内的表达式非常便利,但是设计它们的初衷是用于简单计算的.在模版中放入太多的逻辑运算会让模版过重且难以维护,例如如下代码: <div id="example&quo ...
- Vue生命周期,计算属性、方法、侦听器
vue实例和组件都有生命周期函数,beforeCreate()实例或组件没有被创建的时候执行的钩子函数:created()是实例或组件被创建完成的时候执行的钩子函 数:beforeMount()函数是 ...
- vue.js使用之计算属性与方法返回的差别
<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/vue@2.4.2&quo ...
- Vue基础练习之计算属性、方法、监听器
<body> <div id="root"> {{fullName()}} {{age}} </div> <script> var ...
- Vue基础进阶 之 计算属性的使用
计算属性的基本使用 初始小示例: 代码: window.onload = () =>{ new Vue({ el:'div', data:{ msg:'' } }) } </script& ...
- Vue.js学习 Item5 -- 计算属性computed与$watch
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...
随机推荐
- 软件系统架构 https://www.lanhusoft.com/Article/349.html
跟蓝狐学习Nop--NopCommerce源码架构详解专题目录 Posted By : 蓝狐 Updated On : 2018-04-16 14:46 我们承接以下nop相关的业务,欢迎联系我们. ...
- Erlang进程堆垃圾回收机制
原文:Erlang进程堆垃圾回收机制 作者:http://blog.csdn.net/mycwq 每一个Erlang进程创建之后都会有自己的PCB,栈,私有堆.erlang不知道他创建的进程会用到哪种 ...
- CXF发布在Web服务
1.下载apache-cxf-3.1.4,将jar引入新工程中. 2.People.java package com.soap.server; import java.util.Date; impor ...
- springCloud和docker笔记(1)——微服务架构概述
1.微服务设计原则 1)单一职责原则:只关注整个系统中单独.有界限的一部分(SOLID原则之一) 2)服务自治原则:具备独立的业务能力和运行环境,可独立开发.测试.构建.部署 3)轻量级通信机制:体量 ...
- 编译spark源码 Maven 、SBT 2种方式编译
由于实际环境较为复杂,从Spark官方下载二进制安装包可能不具有相关功能或不支持指定的软件版本,这就需要我们根据实际情况编译Spark源代码,生成所需要的部署包. Spark可以通过Maven和SBT ...
- 集群环境搭建-SSH免密码登陆(二)
1.打开sshd配置 命令: vi /etc/ssh/sshd_config 找到以下内容,并去掉注释符”#“ RSAAuthentication yes PubkeyAuthentication y ...
- kbmMW实现sql查询(图文并茂)
kbmMW对于Delphi来说,是最好的多层框架,没有之一,无论是效率.稳定及架构都让人无可挑剔,尤其自Delphi支持跨平台开发以来,随着Delphi支持ios及Android移动开发,KbmMW也 ...
- KMP 、扩展KMP、Manacher算法 总结
一. KMP 1 找字符串x是否存在于y串中,或者存在了几次 HDU1711 Number Sequence HDU1686 Oulipo HDU2087 剪花布条 2.求多个字符串的最长公共子串 P ...
- xunit输出output到控制台
1.https://xunit.github.io/docs/capturing-output 里面似乎提到2个方法,第二个方法还需要在配置文件中添加appSetting 这里采用第一种方法, 1.添 ...
- 织梦栏目页分页title加"第N页"
以上就是调用栏目管理的SEO标题代码:{dede:field.seotitle /}的方法,这样充分体现列表页标题显示的效果,有利于搜索引擎的收录. 第二个问题就是这样列表页的标题都成了一个样子的了, ...