Vue对列表进行过滤和排序
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="demo">
<input type="text" v-model="searchName">
<ul>
<li v-for="(p,index) in filterPersons" :key="index">
{{index}}--->{{p.name}}--->{{p.age}}
</li>
</ul>
<button @click="setOrder(1)">年龄升序</button>
<button @click="setOrder(2)">年龄降序</button>
<button @click="setOrder(0)">原本顺序</button>
</div>
<script type="text/javascript" src="./js/vue.js"></script>
<script type="text/javascript">
new Vue({
el: "#demo",
data: {
searchName: '',
orderType: 0, // 1 升序 2 降序
persons: [
{name: "Tom", age: 18},
{name: "Jack", age: 20},
{name: "David", age: 15},
{name: "Bob", age: 16},
{name: "Rose", age: 17}
]
},
methods: {
setOrder(orderNum){
this.orderType = orderNum
}
},
computed: {
filterPersons() {
const {searchName, persons, orderType} = this
let fPersons = persons.filter(p => p.name.indexOf(searchName) !== -1)
if (orderType !== 0) {
// 返回负数 p1 在前 返回正数 p2 在前
fPersons.sort(function (p1, p2) {
if (orderType === 1) {
return p1.age - p2.age
} else {
return p2.age - p1.age
}
})
}
return fPersons
}
}
});
</script>
</body>
</html>