其实计算属性不难理解:就是我们先计算,然后得到的结果,保存到 data 属性里面去。类似于缓存的操作。
只不过 Vue
的计算属性 是在 内存中运行的!即 虚拟 Dom
它的原理是:先 创建一个 跟这个 方法名 一样的 变量名 存储到 data 里面去。然后 把 这个 方法的 返回值 赋值给 这个 变量。
注意事项
{{方法()}} 的调用
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
{{currentTime()}}
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
// 如果 methods 和 computed 有重名的方法,那么 methods 优先级更高
methods: {
currentTime: function (){
return new Date();
}
}
script>
body>
html>
computed 计算属性,你会发现 格式完全 就跟 method 一样
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
{{currentTime()}}<br>
{{currentTime1}}
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
// 如果 methods 和 computed 有重名的方法,那么 methods 优先级更高
methods: {
currentTime: function (){
return new Date();
}
},
computed: {
currentTime1: function (){
return new Date();
}
}
});
script>
body>
html>
从 控制台 我们可以看到,方法的话,你调用一次 它就改变一次。但是属性这个东西,它不会改变。除非说 你把 这个 页面 刷新了。它才能改变。
如果我们 在 currentTime1() 中 添加一行 this.message,并且在 控制台上 改变 message 的值,那么 计算属性就会重新计算!
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
{{currentTime()}}<br>
{{currentTime1}}
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
data: {
message: "123"
},
// 如果 methods 和 computed 有重名的方法,那么 methods 优先级更高
methods: {
currentTime: function (){
return new Date();
}
},
computed: {
currentTime1: function (){
this.message;
return new Date();
}
}
});
script>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
{{currentTime()}}<br>
{{currentTime}}
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
// 如果 methods 和 computed 有重名的方法,那么 methods 优先级更高
methods: {
currentTime: function (){
return new Date();
}
},
computed: {
currentTime: function (){
return new Date();
}
}
});
script>
body>
html>
结论:
调用方法时,每次都需要进行计算,既然有计算过程则必定会有额外的系统开销。那么如果这个结果不总是改变呢??这个时候我们是否可以考虑把这个 结果 缓存起来。下次再用的时候 调用 这个结果就可以了。而 计算属性 就可以很方便的做到这一点!
计算属性的主要特性就是 为了 将不经常变化的计算结果进行缓存,以节约我们的系统开销。