需求:後臺管理系統列表,帶查詢條件和分頁,點編輯,新頁面打開,保存以後再跳轉回以前的頁面。
(若是是表單字段少,強烈建議dialog修改。請忽略本文)vue
實現思路:ajax
我我的認爲仍是很方便的,優勢有2個:一是若是須要記錄列表的頁面,添加4行代碼就OK了;二是通用,不須要再額外定製參數this
下面進入正題:spa
一、 store添加一個statecode
listPagePars:new Map(),
二、muntations添加排序
SAVE_LIST_PAGE_PARS: (state,{ path,pars }) => { state.listPagePars.set(path,pars); },
三、 actions添加路由
saveListPagePars: ({ commit },{path,pars}) => { commit('SAVE_LIST_PAGE_PARS',{ path,pars }); },
四、 通過上面3個步驟是store的部分,代碼都不多,淺顯易懂,而後是使用的地方(須要記錄查詢條件和頁碼的vue頁面才用)get
data() { return{ pars: {//核心的,列表頁面的統一參數,建議整個後臺管理系統的列表頁都統一這種格式 filter: { customer_name:'',//查詢條件,有多少寫多少 mobile:'' }, page:1, page_size:15, order_field:'customer_id', //排序字段 order_type:'desc', //排序方式 }, // …… }
五、 列表查詢的時候,如methods裏面有個it
getCustomers() { this.$store.dispatch('saveListPagePars',{path:this.$route.path,pars:this.pars}); //核心,每次查詢條件變化,都先存一次 // 後面是本身的ajax查詢方法, // this.$http.get(API_URL.customer_list,{params:this.pars }).then((res) => { // …… // });
六、 列表頁面初始化
說明:若是store存儲了當前path的參數,就用該path的參數覆蓋當前頁面的默認參數,再查詢io
created() { if(this.$store.state.listPagePars.has(this.$route.path)) { this.pars=this.$store.state.listPagePars.get(this.$route.path); } this.getCustomers(); },
完畢,代碼量不多,須要注意的是列表的查詢表單,統一用你定義好的pars這種格式,有個好處是,查詢的ajax也須要pars參數,比較統一。