列表过滤:
用watch实现:
<script>
new Vue({
el:'#root',
data:{
keyword:'',
person:[
{id:'001',name:'马冬梅',age:18,sex:'女'},
{id:'002',name:'周冬雨',age:19,sex:'女'},
{id:'003',name:'周杰伦',age:20,sex:'男'},
{id:'004',name:'温兆伦',age:22,sex:'男'},
],
filPerson:[]
},
watch:{
keyword:{
//防止一开始没有数据显示
immediate:true,
//防止模板改变,所以要有个定义
//!不能修改原数组
handler(val){
this.filPerson=this.person.filter((p)=>{
return p.name.indexOf(val) !== -1
})
}
}
}
})
</script>
用computed实现:
<script>
new Vue({
el:'#root',
data:{
keyword:'',
person:[
{id:'001',name:'马冬梅',age:18,sex:'女'},
{id:'002',name:'周冬雨',age:19,sex:'女'},
{id:'003',name:'周杰伦',age:20,sex:'男'},
{id:'004',name:'温兆伦',age:22,sex:'男'},
],
},
computed:{
filPerson(){
return this.filPerson=this.person.filter((p)=>{
return p.name.indexOf(this.keyword) !== -1
})
}
}
})
</script>
<body>
<div id="root">
<!--遍历数组是用的最多的-->
<h2>列表</h2>
<input type="text" placeholder="请输入名字" v-model="keyword">
<ul>
<li v-for="(per,index) in filPerson" :key="per.id">
{{per.name}}-{{per.age}}-{{per.sex}}
</li>
</ul>
</div>
</body>
列表排序
<body>
<div id="root">
<h2>列表</h2>
<input type="text" placeholder="请输入名字" v-model="keyword">
<button @click="sortType=2">年龄升序</button>
<button @click="sortType=1">年龄降序</button>
<button @click="sortType=0">原顺序</button>
<ul>
<li v-for="(per,index) in filPerson" :key="per.id">
{{per.name}}-{{per.age}}-{{per.sex}}
</li>
</ul>
</div>
</body>
<script>
new Vue({
el:'#root',
data:{
keyword:'',
sortType:0,
person:[
{id:'001',name:'马冬梅',age:18,sex:'女'},
{id:'002',name:'周冬雨',age:19,sex:'女'},
{id:'003',name:'周杰伦',age:20,sex:'男'},
{id:'004',name:'温兆伦',age:17,sex:'男'},
],
},
computed:{
filPerson(){
const arr=this.filPerson=this.person.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
}
}
})
</script>