公司中後臺項目表格頁面的篩選查詢條件須要進行緩存,在切換tab時,搜索關鍵詞進行保留。html
對搜索的篩選查詢條件進行緩存,就是找個合適的技術方案對其進行存儲。vue
最後所採起的方案是最後一種,利用url的變化來實現需求。主要緣由有一下幾點:vue-router
// 表格頁面,html代碼省略
improt fillUrl form 'mixin/fillUrl'
export default {
name: 'table',
mixins: [fillUrl]
data(){
currentRouteName: 'table',
filters:{
key1: '',
key2: '',
pageSize: 10,
currentPage: 1
}
},
methods:{
search(){},
getRouteData(vm){
let params = {...vm.$route.query}
// 當點擊側邊欄跳轉,url上的參數爲空時
if (Object.keys(params).length === 0) {
vm.fillUrl(vm.filter)
return
}
Object.assign(vm.filter, this.objectPropertiesInt(params, ['page', 'pageSize', 'key1','key2']))
vm.getTableData(vm.filter)
},
changePage(val){
this.filters.page=val
this.fillUrl(this.filter)
},
changePageSize(val){
this.filters.pageSize=val
this.fillUrl(this.filter)
},
getTableDate(val){
// 請求數據略
}
},
beforeRouteEnter(to,from,next) {
next(vm =>{
vm.getTableDate(vm)
})
},
beforeRouteUpdate(to, from, next) {
this.getRouteData(this)
next()
}
}
複製代碼
var mixin = {
methods: {
fillUrl(...val) {
const query = Object.assign({}, ...val)
this.cleanupQueryObject(query)
this.$router.push({
name: this.currentRouteName,
query: query
})
},
// url中的string轉爲number
objectPropertiesInt(obj, properties) {
this.$lodash.forOwn(obj, (v, k) => {
if (this.$lodash.indexOf(properties, k) > -1) {
if (v !== '' && v !== undefined) {
obj[k] = parseInt(v, 10)
}
}
})
return obj;
},
// 清除空字段
cleanupQueryObject(val) {
this.$lodash.forOwn(val, (v, k) => {
if (v === '' || k === undefined || k == []) {
delete val[k]
}
})
}
}
}
export default mixin;
複製代碼