Vue 2.0 笔记
Vue 2.0 笔记
WaterBoatv-for 的更新机制
- 改变数组的方法就会导致 v-for 更新
- 无法改变数组的方法,返回新的数组的,就不会导致 v-for 更新,可采用覆盖数组或者 this.$set(“更新的值”,”更新位置”,”更新值”)
1 | <template> |
这些方法会触发数组改变, v-for 会监测到并更新页面
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
这些方法不会触发 v-for 更新
slice()
filter()
虚拟 DOM
.vue 文件中的 template 里写的标签, 都是模板, 都要被 vue 处理成虚拟 DOM 对象, 才会渲染显示到真实 DOM 页面上
内存中生成一样的虚拟 DOM 结构(==本质是个 JS 对象==)
因为真实的 DOM 属性好几百个, 没办法快速的知道哪个属性改变了
使用虚拟 DOM 只包含必要的属性,就可以和旧的虚拟 DOM 进行比较快速找出不同,只更新变化的部分
动态 class
- 用 v-bind 给标签 class 设置动态的值
- v-bind 的简化语法 :class
1 | <template> |
动态 style
- 用 v-bind 给标签 style 设置动态的值
- v-bind 的简化语法 :style
1 | <template> |
过滤器
过滤器是一个函数,传入值返回处理后的值
过滤器只能用在, ==插值表达式和 v-bind 表达式==
语法
- 全局过滤器 Vue.filter(“过滤器名”, (值) => {return “返回处理后的值”})
- 局部过滤器 filters: {过滤器名字: (值) => {return “返回处理后的值”}
1 | <template> |
传参和多个过滤器的同时使用
1 | <template> |
计算属性 computed
可以根据数据的变化而实时变化的数据
语法
computed: { "计算属性名" () { return "值" } }
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
```vue
<template>
<div>
<p>{{ num }}</p>
</div>
</template>
<script>
export default {
data() {
return {
a: 10,
b: 20,
};
},
// 注意: 计算属性和data属性都是变量-不能重名
// 注意2: 函数内变量变化, 会自动重新计算结果返回
computed: {
num() {
return this.a + this.b;
},
},
};
</script>
计算属性的完整写法
计算属性也是变量, 如果想要直接赋值, 需要使用完整写法
语法
computed: { "属性名": { set(值){ }, get() { return "值" } } }
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
```vue
<template>
<div>
<div>
<span>姓名:</span>
<input type="text" v-model="full" />
</div>
</div>
</template>
<script>
export default {
computed: {
full: {
// 给full赋值触发set方法
set(val) {
console.log(val);
},
// 使用full的值触发get方法
get() {
return "无名氏";
},
},
},
};
</script>