官方文档中已经有对其的解释了,在这里把我的理解记录一下Vue中的methods、watch、computed

computed 的使用场景

  • HTML模板中的复杂逻辑表达式,为了防止逻辑过重导致不易维护,都应当把相关逻辑放入计算属性。

    • 比如这种

              <p>Reversed message: "{{ message.split('').reverse().join('') }}"</p>
      </div>

在这个地方,模板不再是简单的声明式逻辑。这里是想要显示变量 message 的翻转字符串,而这种包含复杂逻辑处理的表达式,都应当使用计算属性。

computed 和 methods 的区别

1. computed是属性调用,而methods是函数调用

这意味着在HTML的插值里

  • computed定义的方法是以属性访问的形式来调用,如 {{reversedMessageComputed}}
  • methods定义的方法,则要加上 () 来调用,如 {{reversedNameMethod()}} ,否则视图中会渲染出如下内容
  • function () { [native code] }

2. computed带有缓存功能,而methods不是

这里我引用一下官方文档的说明

计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。

```<!-- html -->
<div id="root">
<p>Reversed message: "{{ reversedNameMethod() }}"</p>
<p>Reversed message: "{{ reversedMessageComputed }}"</p>
</div>
```


// javascript
var vm = new Vue({
el: '#root',
data: {
name: 'Alex',
message: 'Hello'
},
methods: {
reversedNameMethod: function () {
return this.name.split('').reverse().join('')
}
},
computed: {
// 计算属性的 getter
reversedMessageComputed: function () {
// `this` 指向 vm 实例
return this.message.split('').reverse().join('')
}
}
})

上面的例子中,缓存意味着只要 message 还没有发生改变,多次访问 reversedMessageComputed 计算属性会立即返回之前的计算结果,而不必再次执行函数。而 reversedNameMethod() 方法,每次调用都会重新执行函数。

但同时需要注意,这也同样意味着下面的计算属性将不再更新,因为 Date.now() 不是响应式依赖:


// javascript
computed: {
now: function () {
return Date.now()
}
}

now 的值将在Vue实例化时生成,并且不再改变。
相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。

computed其他说明

  • computed 和 methods 不可以重名

    • Vue会把 methods 和 data 里的东西,全部代理到Vue生成的对象中,这会将computed中重名属性覆盖

来源:https://segmentfault.com/a/1190000017920016

Vue.js中 computed 和 methods 的区别的更多相关文章

  1. 实例分析Vue.js中 computed和methods不同机制

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 1.首先最明显的不同 就是调用的时候,methods要加上() 2.我们可以使用 methods 来替代 comput ...

  2. vue计算属性computed和methods的区别

    computed和methods的区别 在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue. com ...

  3. Vue中 computed 和 methods的区别

    涉及到计算部分的时候,计算属性是基于它们的依赖进行缓存的,如果说值不变,那么它就不会去重新执行,只有当值发生了改变,它才会去重新执行一次,其它时候它都是缓存的.而方法则会反复计算处理.二者之间的差距就 ...

  4. vue.js中compted与model的区别

    在p便签内写的{{reversemessage}}方法,若js里对应的函数为computed则不需要加上括号 若js里对应的函数为model则应该将{{reversemessage}}改为{{reve ...

  5. Vue.js 计算属性computed和methods的区别

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...

  6. vue中computed与methods的异同

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...

  7. vue系列---理解Vue中的computed,watch,methods的区别及源码实现(六)

    _ 阅读目录 一. 理解Vue中的computed用法 二:computed 和 methods的区别? 三:Vue中的watch的用法 四:computed的基本原理及源码实现 回到顶部 一. 理解 ...

  8. vue.js 中 data, prop, computed, method,watch 介绍

    vue.js 中 data, prop, computed, method,watch 介绍 data, prop, computed, method 的区别 类型 加载顺序 加载时间 写法 作用 备 ...

  9. Vue.js中使用select选择下拉框

    在Vue.js中使用select选择下拉框有两种方法: 第一种: Add.html: <select v-model="sysNotice.noticeType" id=&q ...

随机推荐

  1. css样式学习小知识

    1. 使用百分比设置宽高 自适用宽高的,有分割的区域,可以适用百分比:30% 70% 如果有一部分是固定的宽度或者高度,可以使用:height: calc( 100% - 36px ); 2. inp ...

  2. querySelector()与querySelectorAll()的区别及NodeList和HTMLCollection对象的区别

    querySelector().Document.Element类型均可调用该方法. 当用Document类型调用querySelector()方法时,会在文档元素范围内查找匹配的元素:而当用Elem ...

  3. vue发布后的一些问题

    1.发布后把config/index.js 的productionSourceMap: true,改成productionSourceMap: false webpack成功隐藏

  4. 微软技术大会直播倒计时7天 | 地球上的IT咖们,正在慢慢向北京聚集

    去年,一句歌词火了:“我在北方的寒夜里,四季如春.”足以见得,北京的冬天,是可以把人冻蒙圈儿的. 然而有一群人,却正在慢慢靠近这样寒冷的北京,7 天后,他们将齐聚在北京. 他们来这里干什么?又是来见谁 ...

  5. HCNA多区域OSPF配置

    1.拓扑图 2.各路由器配置角本 ospf 多区域配置 #R5配置 sys sysname AR5 interface s2// ip add 10.0.35.5 255.255.255.0 inte ...

  6. 用python管理Cisco路由器

    目前DevOps是整个运维发展的方向,Network的运维也一样.使用程序控制底层的路由器是最基本的要求之一. 本文简单解释如何用Python控制路由器,对网络设备进行配置. Python和网络设备连 ...

  7. HDU 4757 Tree(可持续化字典树,lca)

    题意:询问树上结点x到结点y路上上的权值异或z的最大值. 任意结点权值 ≤ 2^16,可以想到用字典树. 但是因为是询问某条路径上的字典树,将字典树可持续化,字典树上的结点保存在这条路径上的二进制数. ...

  8. 从零开始Vue项目实战(四)-路由

    一.理解路由 传统的页面应用,是用一些超链接来实现页面切换和跳转的.而vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来. 路由中有三个基本的概念 route, rou ...

  9. 【[SDOI2010]粟粟的书架】

    第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度\(O(logn)\) 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像 ...

  10. luogu P2124 奶牛美容

    嘟嘟嘟 首先数据范围那么小,那么算法也是相当暴力的. 对于一个点(x, y)所属的联通块,预处理出从这个点出发到这个块外的所有点的曼哈顿距离.复杂度O(n4). 然后求答案:最少答案不一定是三个联通块 ...