# vue中的问题 🚊
# vue中key的理解
# vue2.0中给对象添加一个新属性
在vue2.0中给对象添加一个新属性并且渲染在页面上,用普通的对象添加属性操作方法,属性虽然可以添加成功,但是没办法渲染到页面上,如果用$set()去操作的话就不会出现这种情况。
<template>
<div>
<div>男孩的名字叫{{ itemData.name }},今年{{ itemData.age }}岁,他有一个朋友叫{{ itemData.addName }}</div>
<Button @click="ckickBtn">点一下</Button>
</div>
</template>
<script>
export default {
data() {
return {
itemData: {
name: '李白',
age: 23
}
}
},
methods: {
ckickBtn () {
// 这样添加一个新属性,对象中虽然能够添加上,但是没办法在渲染在页面上。
// this.itemData.addName = '杜甫'
// 用$set()方法可以向对象中添加一个新属性并且页面上能够更新
this.$set(this.itemData, 'addName', '杜甫')
console.log(this.itemData)
}
},
}
</script>
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
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
# vue2.0中通过下标修改数组中的对象
在vue2.0中通过下标修改数组中的对象,并且渲染在页面上,用普通的操作方法,对象虽然可以添加成功,但是没办法渲染到页面上,如果用$set()去操作的话就不会出现这种情况。
<template>
<div>
<div>你的名字{{ arr[0].name }}</div>
<Button @click="ckickBtn">点一下</Button>
</div>
</template>
<script>
export default {
data() {
return {
arr: [
{ name: '李白', age: 20 },
{ name: '杜甫', age: 25 }
]
}
},
methods: {
ckickBtn () {
// 这样修改数组中的对象虽然数据能够修改,但是没办法在渲染在页面上。
// this.arr[0] = { name: '小白', age: 20 }
// 用$set()方法可以修改数组中的对象,并且页面上能够更新
this.$set(this.arr, 0, { name: '小白', age: 20 })
console.log(this.arr)
}
},
}
</script>
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
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
# vue过滤器filter和filters的使用
使用Vue,可以有两种不同的方式注册过滤器(全局过滤器和本地过滤器),你可以跨所有组件访问全局过滤器,而本地过滤器只允许你在其定义的组件内部使用。
注意:当全局过滤器和局部过滤器重名时,会采用局部过滤器。
时间格式处理为了方便也可以使用全局过滤器
<!-- 换括号中使用过滤器 -->
{{ place | filterPlace }}
<!-- v-bind中使用过滤器 -->
<div v-bind:id="place | filterPlace"></div>
<!-- v-model中使用过滤器 -->
<div v-model="place | filterPlace"></div>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 全局过滤器filter
// eg: '重庆;九龙坡'
// 展示字符串中最后一个分号分割的数据
vue.filter('', function (value) {
if(!value) return ''
const array = value.split(';')
return array[array.length-1]
})
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 本地过滤器filters
本地过滤器存储在Vue组件中,作为filters属性中的函数。这个时候你想注册多少个就能注册多少个。
filters: {
// eg: '重庆;九龙坡'
// 展示字符串中最后一个分号分割的数据
filterPlace(value) {
if(!value) return ''
const array = value.split(';')
return array[array.length-1]
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9