1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| //store.js const store = new Vuex.Store({ state: { onshowFunction: { "pages/index/index": {//仅为示例 functionName: "", //执行方法名 params: {}, //执行方法参数 path: "", //跳转路径 functionType: "", //执行类型(store/app/page,vuex方法/app/页面内方法) pageData: "", //页面使用的特殊数据 } }, }, mutations: { getCurrentPages(state, options) { //检查getCurrentPages栈是否准备完成,options.num为检测页面栈中倒数num页面的route options = options || {}; console.log("getCurrentPages") if (getCurrentPages() && getCurrentPages()[0] && getCurrentPages()[0].route) { if(getCurrentPages()[getCurrentPages().length - (options.num||1)]){ options.success && options.success(getCurrentPages()[getCurrentPages().length - (options.num||1)].route) }else{ options.success && options.success() } } else { setTimeout(() => { this.commit("getCurrentPages", options) }, 500) } }, setOnshowFunction(state,options){//设置待执行事件 let yuanData = state.onshowFunction[options.path];//原始数据,防止替换掉之前已经设置的数据 state.onshowFunction[options.path]={ functionName: yuanData.functionName||options.functionName||"", //执行方法名 params: yuanData.params||options.params||{}, //执行方法参数 path: yuanData.path||options.path||"", //跳转路径 functionType: yuanData.functionType||options.functionType||"", //执行类型(store/app/page,vuex方法/app/当前内方法) pageData: yuanData.pageData||options.pageData||{}, //页面使用的特殊数据 } options.success && options.success() }, checkOnshowFunction(state, options) { //检测onshow中是否有待完成方法 options = options || {}; if (state.onshowFunction[options.path]) { let {functionName,params,path,functionType} = state.onshowFunction[options.path] if (functionName) { new Promise((resolve)=>{ if(this.state.onLaunchData.query.needLoginYn=='Y'){ this.commit('checkLoginData',{ success:()=>{ resolve() } }) }else{ resolve() } }).then(()=>{ if (functionType == "page") {//如果保存的functionType为page,则调用的方法为页面事件,需要在页面中完成 options.success && options.success({ //成功页面需要调用next清空信息 functionName: functionName, params: params, next: () => {//为页面事件注入一个成功回调(执行成功后清除保存的待执行方法,保证下次onshow不会重复执行此方法) state.onshowFunction[options.path].functionName = "" state.onshowFunction[options.path].params = "" state.onshowFunction[options.path].path = ""; } }); } else {//如果保存的functionType为空,则调用的方法为全局事件,不需要在页面中完成,执行后清除储存的方法 if (functionName) { //执行方法 this.commit(functionName, params) //执行成功后清除保存的待执行方法,保证下次onshow不会重复执行此方法 state.onshowFunction[options.path].functionName = "" state.onshowFunction[options.path].params = "" } else if (path) {//如果存了个path,则onshow中执行跳转,然后清空待执行方法 this.commit("changePage", { path: path }) state.onshowFunction[options.path].path = ""; } } }) } } } } })
|