Vue —— 排序

  • Post author:
  • Post category:vue




Search.vue

  • 页面模板
<template>
......
<!-- 排序 -->
<ul class="sui-nav">
	<li :class="{active : isOne}"  	//点击谁,谁高亮
		@click="changeOreder(1)">	//点击调用 排序规则的转换 方法
		//高亮状态时,按照 searchParams 参数的排序规则显示箭头的升降
		<a> 综合 <span v-show ="isOne && !isDown"></span>		
				<span v-show="isOne && isDown"></span>
		</a>
	</li>
	<li :class="{active : !isOne}" @click="changeOreder(2)">
		<a> 价格 <span v-show ="!isOne && !isDown"></span>
				<span v-show="!isOne && isDown"></span>
		</a>
	</li>
	......
</ul>

......
</template>

  • 计算属性
<script>
......
  computed: {
	......
    //排序效果标识
    isOne() {
      return this.searchParams.order.indexOf("1") != -1
    },
    //排序箭头
    isDown() {
      return this.searchParams.order.indexOf("desc") != -1 
    }
  },

  • 排序规则的转换方法
  methods: {
    //由于搜索功能,向服务器发请求获取search模块数据,会根据每次传递的参数获取不同的数据进行展示,所以dispatch不能放 mounted 里面
    getData() {
      this.$store.dispatch("getSearchList", this.searchParams);
    },
    //=== 排序 的转换 ===
    changeOreder(flag){
      // flag 代表用户点击的是 综合(1) 还是 价格(2)
      
      //原始排序规则
      let originOrder = this.searchParams.order;
      let originFlag = this.searchParams.order.split(":")[0];
      let originSort = this.searchParams.order.split(":")[1];

      //准备一个新的排序规则
      let newOrder = "";

      //开始判断
      //如果重复点击,转换排序规则
      if( flag == originFlag){
        newOrder = `${originFlag}:${ originSort=="desc"?"asc":"desc"}`;
      }else {
        //不是重复点击,修改为点击该排序的默认
        newOrder = `${flag}:${"desc"}`
      }

      //重新整理参数
      this.searchParams.order = newOrder;

      //发请求
      this.getData()
    },
  },

};
</script>



版权声明:本文为weixin_54966486原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。