关于vue查询条件缓存

现在vue基本都是单页面,在通用的后台管理系统中,有很多的列表页面,详情页面。列表页面有众多的筛选条件,当我们根据筛选条件查询出数据后,点击详情,往往是跳转到一个新路由查看详情。这时候如果查询页面的筛选条件没有缓存,我们返回到详情页的时候,列表的筛选条件是会被重置的,又需要用户重新选择筛选条件。

如果需要缓存筛选条件,那么下面代码应该会对你有帮助!

function gusid(len, radix) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    var uuid = [], i;
    radix = radix || chars.length;
    if (len) {
        for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
    } else {
        var r;
        uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
        uuid[14] = '4';
        for (i = 0; i < 36; i++) {
            if (!uuid[i]) {
                r = 0 | Math.random() * 16;
                uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
            }
        }
    }
    return uuid.join('');
}
var routerUtils = {};

routerUtils.install = function(Vue) {
    Vue.prototype.$addRouteFilter = function (options) {
        var id = gusid(8);
        let query = Object.assign({}, options.query, {filter: id});
        this.$router.push({name: options.routeName, query: query});
        var data = {
            id: id, 
            params: Object.assign({}, options.searchParams)
        }
        this.$store.commit('searchFilter/add', data);
    }
    Vue.prototype.$cleanRouteFilter = function () {
        this.$router.push({ name: this.$route.name, query: null }).catch(() => {});
    }
    Vue.prototype.$setSearchParams = function (callback) {      
        var filters = this.$store.state.searchFilter.filters;
        var query = this.$route.query;
        if(query && query.filter ) {
            var id = query.filter;
            filters.forEach((item)=>{
                if(id == item.id) {
                    if(item.params) callback && callback(item.params);
                }
            })
            
        }
    }
    Vue.prototype.$routeBack = function () {
        this.$router.back();
    }
}

export default routerUtils;

在main.js中将如上插件引入

import routerPlugins from './plugins/router';

Vue.use(routerPlugins);

项目中使用:

//查询按钮
search() {
	this.searchParams.currentPage=1;
	this.searchParams.pageSize=20;
	this.searchParams.orgIds = this.org.id;
	this.searchParams.orgNames = this.org.title;
	//将查询条件缓存起来	
    this.$addRouteFilter({routeName: 'special-equipment', searchParams: this.searchParams});
      this.getEqusData();
},

//执行查询
getEqusData() {
    //获取缓存的查询条件
	  this.$setSearchParams((data)=>{
	      this.searchParams = data;
	  	// console.log("查询条件",data)
	      this.org.id = data.orgIds;
	      this.org.title = data.orgNames || '请选择';
	  });
	  this.loading=true
      this.$http.get(url, this.searchParams).then((res) => {
        this.equList = res.items;
        this.total = res.total;
		this.loading=false;
      });
    }

//在页面created 或者 mounted中执行查询
created() {
	  // this.getEqusData();
  },
//在mounted中执行查询时,建议再页面渲染完后再执行,能避免不必要的坑!!!
  mounted() {
    this.$nextTick(()=>{
		this.getEqusData();
	})
  },

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个程序猿cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值