[vue]使用computed属性完成条件排序

2018-06-06  本文已影响0人  Re_Vive

使用select来设置条件,对列表进行不同的排序方式

1.使用计算属性来完成对json数据的排序,并不改变原数据
2.用v-model对select的选择做双向绑定,v-for对不同的条件渲染不同的值

<div>
    <select v-model="selected">
        <option v-for="item in sort" :value="item.value">{{item.title}}</option>
    </select>
    <ul>
        <li v-for="item in changeFor(selected)">{{item.title}}--价格:{{item.price}}--星级:{{item.star}}</li>
    </ul>
</div>

👆这里代码比较简单,一个select 一个ul列表

data(){
    return{
        sort:[
            { value:'default', title:'推荐'},
            {value:'star', title:'星级' },
            { value:'price', title:'价格'}
        ],
        selected:'defalut',//默认选择
        list:[
            {price:3,star:8.4,title:'三'},//随便写的json数据
            {price:1,star:2.7,title:'一'},
            {price:8,star:3.2,title:'八'},
            {price:4,star:5.6,title:'四'},
        ]
    }
},
computed:{
    sotrsPrice(){//简单的价格排序
        let listPrice = this.list.slice(0)//对象深拷贝,可以不改变原数据
        return listPrice.sort((a,b)=>{
            return a.price - b.price
        })
    },
    sotrsStar(){//根据星级排序
        let listStar = this.list.slice(0)
        return listStar.sort((a,b)=>{
            return a.star - b.star
        })
    },
},
methods:{
    changeFor(val){//根据不同的条件让v-for渲染不同的数据
        switch (val){
            case 'defalut':
                return this.list
            case 'star':
                return this.sotrsStar
            case 'price':
                return this.sotrsPrice
        }
    }
}

👆使用一个methods函数判断当前select的值,将方法用在v-for里,返回不同的computed方法后的数据


(By The Way:多阅读文档,真可以少走很多弯路)

上一篇 下一篇

猜你喜欢

热点阅读