列表过滤
实现方式:
- watch实现
必须采用 immediate 实现页面初始化时加载列表。
<input type="text" v-model="keyword"></input>
<ul>
<li v-for="(p, index) in filterPerson" :key="index">
</li>
</ul>
watch:{
// 要监视的属性
keyword:{
immediate: true,
handler(newValue){
this.filterPerson = this.persons.filter((p)=>{
return p.name.indexOf(val) !== -1;
});
}
}
}
- 计算属性实现:return方式
使用两个return实现。
computed:{
// 直接要计算的属性,相当于get()
filterPerson(){
return this.persons = this.person.filter((p)=>{
// keyword必须赋值初始化
return p.name.indexOf(this.keyword) !== -1;
})
}
}
💡 js中的字符串在匹配空串时,会返回 0 而不是 -1,例如 ‘abc’.indexOf(’’) == 0,可以利用这个特性来获取整个数组,例如上述例子中的return语句。
列表排序
computed:{
filterPersons(){
const arr = this.persons.filter((p)=>{
return p.name.indexOf(this.keyword) !== -1;
})
// 判断是否需要排序
if (this.sortType) {
arr.sort((p1, p2) =>{
return this.sortType === 1 ? p2.age - p1.age : p1.age - p2.age;
});
}
return arr;
}
}
数组的push是原型的push;vue管理后,array的push不再是原型的push,而是一个封装。