import {Component, Vue} from 'vue-property-decorator' import Router from 'vue-router'; // const routerPush: any = Router.prototype.push; // 添加 vue 属性类型声明 // @ts-ignore declare module "vue/types/vue" { interface Vue { Mixin_recordRouterLinkData(targetRouter: string, saveParams: any, routeParams?: any): void; Mixin_goBack(): void; routeName: string; Mixin_isBack: boolean; } } @Component({ beforeRouteEnter (to, from, next) { next((vm: any) => { // 通过 `vm` 访问组件实例 // vm.targetRoute = (vm.$route.query.target? vm.$route.query.target : '') as string; const jumpLen = window['ROUTER_LINK_JUMP'] && window['ROUTER_LINK_JUMP'].length || 0; if (jumpLen > 0 && window['ROUTER_LINK_JUMP'][jumpLen - 1]) { // 这是判断返回后的 if (window['ROUTER_LINK_JUMP'][jumpLen - 1].backRoute === vm.routeName && from.path === window['ROUTER_LINK_JUMP'][jumpLen - 1].targetRoute) { let params = window['ROUTER_LINK_JUMP'].pop(); console.log('返回传参',params); // params.saveParamskey && ((vm as any)[params.saveParamskey] = params.saveParamsValue); let keys = Object.keys(params.saveParams); keys.forEach(key => { (vm as any)[key] = params.saveParams[key]; }) } // 这是判断是否可以返回的 const len = window['ROUTER_LINK_JUMP'].length; if (len > 0 && window['ROUTER_LINK_JUMP'][len - 1].targetRoute === vm.routeName) { vm.Mixin_isBack = true; } else { vm.Mixin_isBack = false; } } }) }, }) export default class BackMixin extends Vue { public routeName: string = ''; // 当前页面路由路径 public Mixin_isBack: boolean = false; // 当前页面是否具备返回 public $router: any; public $route: any; public created() { // 不知为何,执行了超多次 this.routeName = this.$route.path; } /** * 返回 */ public Mixin_goBack() { this.$router.back(); } }