watch 监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="root">
<input type="text" v-model="ll">
<button @click="kk=1">年龄升序</button>
<button @click="kk=2">年龄降序</button>
<button @click="kk=0">原顺序</button>
<ul>
<li v-for = "item in fil" ::key="item.age" >
{{item.name}}-{{item.age}}-{{item.sex}}
</li>
</ul>
</div>
</body>
<script>
let vm = new Vue({
el:"#root",
data:{
lit:[
{name:"马东波",age:"20",sex:"女"},
{name:"周冬雨",age:"19",sex:"女"},
{name:"杰伦",age:"22",sex:"男"},
{name:"温伦",age:"21",sex:"男"}
],
ll :"" ,
kk : 0,
list:[]
},
watch:{
ll:{
immediate:true,
handler(val){
this.list = this.lit.filter(item => {
return item.name.indexOf(this.ll) !== -1
})
}
},
kk:{
handler(){
if(this.kk>0){
this.list.sort((a,b)=>{
return this.kk == 1 ? a.age - b.age : b.age -a.age
})
}else{
this.list = JSON.parse(JSON.stringify(this.lit))
}
}
}
}
})
</script>
</html>
computed 计算
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="root">
<input type="text" v-model="ll">
<button @click="kk=1">年龄升序</button>
<button @click="kk=2">年龄降序</button>
<button @click="kk=0">原顺序</button>
<ul>
<li v-for = "item in fil" ::key="item.age" >
{{item.name}}-{{item.age}}-{{item.sex}}
</li>
</ul>
</div>
</body>
<script>
let vm = new Vue({
el:"#root",
data:{
lit:[
{name:"马东波",age:"20",sex:"女"},
{name:"周冬雨",age:"19",sex:"女"},
{name:"杰伦",age:"22",sex:"男"},
{name:"温伦",age:"21",sex:"男"}
],
ll :"" ,
kk : 0,
list:[]
},
computed: {
fil(){
var arr = this.lit.filter(item =>{
return item.name.indexOf(this.ll) !== -1
})
if(this.kk){
arr.sort((a,b)=>{
return this.kk==1 ? a.age-b.age : b.age-a.age
})
}
return arr
}
},
})
</script>
</html>