{% note info %}
对于Vue的第三篇总结,主要介绍计算属性、filter、mixin
{% endnote %}
#计算属性 VS 方法
计算属性的值是缓存的,因此计算属性在直接需要渲染时比方法更加合适,计算属性不会影响其他渲染函数。例如下面一例中,把注释部分替换掉就会发现每次点击按钮会同时打印出a
和b
<div id="root">
<!--
<p>age ——{{ addToA() }}</p>
<p>age —— {{ addToB() }}</p>
-->
<p>age ——{{ addToA }}</p>
<p>age —— {{ addToB }}</p>
<button @click="addA">add age A</button>
<button @click="addB">add age B</button>
</div>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
new Vue({
el: "#root",
data: {
age: 10,
a: 1,
b: 2
},
methods: {
/*
addToA() {
console.log("a");
return this.age + this.a;
},
addToB() {
console.log("b");
return this.age + this.b;
},
*/
addA() {
this.a += 1;
},
addB() {
this.b += 1;
}
},
computed: {
addToA() {
console.log("a");
return this.age + this.a;
},
addToB() {
console.log("b");
return this.age + this.b;
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{% codepen LXZYNN %}
#filter——过滤器
能够方便的对一些值进行修改过滤,下面一例就是使标题大写,内容截取 100 字符
<div v-for="text in texts" :key="text.id" class="text">
<h3>{{ text.title | upperCase }}</h3>
<article>{{ text.body | catwords }}</article>
</div>
1
2
3
4
2
3
4
new Vue({
filters: {
upperCase(value) {
return value.toUpperCase();
},
catwords(value) {
return value.slice(0, 100) + "...";
}
}
});
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
{% note info %}
其实还可以使用Vue.filter({ /* some code */ })
来表示,这里就介绍一种
{% endnote %}
{% codepen QJdEjp %}
#mixin
混合模式——公用方法及变量,例如:
// src/minix/blogMixins.js
export default {
computed: {
searchBlogs() {
return this.blogs.filter((blog) => {
return blog.title.match(this.search);
})
}
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
// src/component/MixinBlog.js
import blogMixins from '../mixins/blogMixins';
new Vue({
mixins: [ blogMixins ]
})
1
2
3
4
5
2
3
4
5