Vue.js 计算属性(computed)

如果在模板中使用一些复杂的表达式,会让模板显得过于繁重,且后期难以维护。对此,vue.js 提供了计算属性(computed),你可以把这些复杂的表达式写到里面。

实例 1

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue.js 计算属性(computed)</title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" href="css/mui.min.css">
<title>Vue.js 计算属性(computed)</title>
<script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
a={{ a }}, b={{ b }} <!-- a = 1; b = 2; -->
</div>
<script>
var app= new Vue({
el: '#app',
data: {
a: 1
},
computed: {
b: function () {
return this.a + 1 //返回的值是2 所以b=2;
}
}
})
</script>
</body>
</html>

计算属性 缓存

缓存是计算属性的一大特点,使用计算属性时,每次获取的值是基于依赖的缓存值,也就是说,当数据源未发生变动时,获取的值将一直是缓存值。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue.js 计算属性(computed)</title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" href="css/mui.min.css">
<title>Vue.js 计算属性(computed)</title>
<script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
a={{ a }}, b={{ b }} <!-- a = 1; b = 2; -->
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
a: 1
},
computed: {
b: function () {
return this.a + 1 //返回的值是2 ,b=2 因为 b 是依赖于 a 的;
}
}
})
vm.b = 8;
</script>
</body>
</html>

上述实例中,我们对 b 进行了重新赋值,但是没有改变a的值,因为 b 是依赖于 a 的,所以最终 b 的结果还是2。

计算属性与methods的区别

计算属性能实现的功能,使用方法(methods)也能实现,但两者还是有本质的不同,区别如下:

计算属性获取的是缓存值,而methods是直接调用函数进行计算所得。

计算属性中的函数在dom加载后马上执行,并将结果显示在页面上。methods中的函数需要一定的触发条件,否则不会执行。

计算属性 Getter 和 Setter 方法

vue.js 计算属性有两个方法,分别为 getter 和 setter,当没有指明方法时,默认使用 getter。

实例1中 computed 里面的代码也可以写成:

computed: {
b: {
get:function () {
return this.a + 1
}
}
}

运行结果是一样的。

实例 3

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue.js 计算属性(computed)</title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" href="css/mui.min.css">
<title>Vue.js 计算属性(computed)</title>
<script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">{{message}}</div> <!-- 显示为my second lesson -->
<script>
var vm = new Vue({
el: '#app',
data: {
title: 'my first lesson'
},
computed: {
message: {
// getter
get: function () {
return this.title
},
//setter
set: function (newValue) {
this.title = newValue
}
}
}
})
vm.message = 'my second lesson'; // vue.js会执行set方法,从而改变message的值,
//如果不使用set方法,message值为“my first lesson”。
</script>
</body>
</html>

上述实例中,在给message重新赋值时,vue.js会执行set方法,从而改变message的值,如果不使用set方法,message值为“my first lesson”。

Vue.js 计算属性(computed)的更多相关文章

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

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

  2. Vue.js 计算属性是什么

    Vue.js 计算属性是什么 一.总结 一句话总结: 模板 表达式 维护 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护 ...

  3. Vue.js 计算属性

    Vue.js 计算属性 使用计算属性的实例: <!DOCTYPE html> <html> <head> <meta cahrset="utf-8& ...

  4. vue的计算属性computed和监听器watch

    <template> <div> this is A.vue <br> <!--计算属性--> <label for="msg" ...

  5. Vue之计算属性Computed和属性监听Watch,Computed和Watch的区别

    一. 计算属性(computed) 1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷. 例如: <div id="app"> {{ myname ...

  6. vue.js计算属性 vs methods

    计算属性:Vue.js 模板内的表达式非常便利,但是缺点就是只能用于简单的运算,如果模板中有太多的逻辑运算会让模板不堪重负且难以维护.恰恰计算属性可以处理复杂的逻辑运算,也就是说对于任何复杂逻辑你都应 ...

  7. 浅谈Vue中计算属性computed的实现原理

    虽然目前的技术栈已由Vue转到了React,但从之前使用Vue开发的多个项目实际经历来看还是非常愉悦的,Vue文档清晰规范,api设计简洁高效,对前端开发人员友好,上手快,甚至个人认为在很多场景使用V ...

  8. vue中计算属性computed方法内传参

    vue中computed计算属性无法直接进行传参 如果有传参数的需求比如说做数据筛选功能可以使用闭包函数(也叫匿名函数)实现 例如: 在上篇博客vue安装使用最后的成绩表练习中的过滤功能的实现: &l ...

  9. Vue.js 计算属性的秘密

    计算属性是一个很邪门的东西,只要在它的函数里引用了 data 中的某个属性,当这个属性发生变化时,函数仿佛可以嗅探到这个变化,并自动重新执行. 上述代码会源源不断的打印出 b 的值.如果希望 a 依赖 ...

随机推荐

  1. c# WinForm的一些问题

    工作中,用WinForm写了一段程序,刚开始运行正常,后来替换为公司框架的时候,发现原来用Label拼的表格控件,里面的Text无法显示,后来发现,父控件的ForColor为Control导致,子空间 ...

  2. 2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

    import java.util.Scanner; public class Number { private static Object i; /* *第一题 mingrikejijavabu中字符 ...

  3. HDU 5371(2015多校7)-Hotaru&#39;s problem(Manacher算法求回文串)

    题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...

  4. Interfaces (C# Programming Guide)

    https://msdn.microsoft.com/en-us/library/ms173156.aspx An interface contains definitions for a group ...

  5. Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我

    前言 相比于 Django 的 ORM ,SQLAlchemy "不依靠外键进行跨表联查" 的解决方案就比较多. 没啥好说的,只能怪自己学艺不精..  _(:з」∠)_ 解决办法 ...

  6. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】

    只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...

  7. bzoj 1596: [Usaco2008 Jan]电话网络【贪心】

    dfs,如果一个点的儿子.本身.父亲都没有塔,就在父亲上建一个 原理不明-- #include<iostream> #include<cstdio> using namespa ...

  8. P4556 [Vani有约会]雨天的尾巴(线段树合并)

    传送门 一道线段树合并 首先不难看出树上差分 我们把每一次修改拆成四个,在\(u,v\)分别放上一个,在\(lca\)和\(fa[lca]\)各减去一个,那么只要统计一下子树里的总数即可 然而问题就在 ...

  9. P2973 [USACO10HOL]赶小猪

    跟那个某省省选题(具体忘了)游走差不多... 把边搞到点上然后按套路Gauss即可 貌似有人说卡精度,$eps≤1e-13$,然而我$1e-12$也可以过... 代码: #include<cst ...

  10. ACM_18(同余)

    18 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一个简单的问题,大家应该有不少做过大数加法题吧.这个题的数据也是64位整数放 ...