Vue動的ルーティング構成、f5更新動的ルーティング損失およびその他のグラフィックの詳細

Vueダイナミックルーティング構成、f5リフレッシュダイナミックルーティングが失われ、ルーティングリダイレクションがプロミスエラーを報告する----------------それは非常に簡単です

ビジネスプロセス

ユーザーログイン(トークンを取得するため)

ユーザートークンを取得したら、トークンを送信して(トークンが不要な場合は、この手順をスキップして)、動的ルーティングインターフェースをリクエストできます。

重要:動的ルーティングアレイはローカルに存在します

くるみ:

// 用户登录
	PostUserToken(data)
      .then( response => {
    
    
        //设置token
        this.$cookie.set('access_token',response.data.access_token,response.data.expires_in+"S") 
        let data = {
    
     'access_token' : response.data.access_token }
        //获取动态路由数组
        GetMenuPath(data).then( response => {
    
    
          if(response.data.resp_code == 200){
    
    
            //动态路由存在本地-----退出登录时候清空
            localStorage.setItem('newRouterArr',JSON.stringify(this.returnRouterArr(response.data.data)));
          }else{
    
    
            this.$message.error('导航菜单获取失败,请联系管理员'); 
          }
          this.$message({
    
     message:'登录成功', type: 'success' });
          // 关闭loading
          this.loading = false;
        })
      })

動的ルーティング(router / index.js)をセットアップし、f5またはctrl + rリフレッシュが動的ルーティングを失うのを防ぎます

キーポイント:.vueファイルのパス、numが1と0に等しいという判断、そして最後のnext()を導入します。

baseUrlは私の接頭辞の1つです。たとえば、フロントエンドコードデプロイメントパッケージがサーバーのゲートウェイファイル127.0.0.1:8080のに配置さいる場合、baseUrlは'/ gateway'に等しく、ローカルパッケージが実行され、ローカルアドレスもhttp:/になります。 / localhost:8080 / gateway /

くるみ:


  // 获取动态路由
  let newRouterArr = JSON.parse(localStorage.getItem('newRouterArr'));
  //防止刷新时候(保证浏览器回退的时候)能直接返回到上个页面,不会叠加
  let num = 1;
  // 路由钩子
  router.beforeEach((to, from, next) => {
    
    

  //储存当前路由,便于在重新打开时候跳到上次关闭的页面(用户主动退出除外)
  if(to.name){
    
    
    localStorage.setItem('nowRouter',JSON.stringify(to));
  }else if(from.name){
    
    
    localStorage.setItem('nowRouter',JSON.stringify(from));
  }
  
  //首页时候,直接跳转(首页不是动态页面)
  if(to.path == baseUrl+"/" || to.path == baseUrl){
    
    
    next(baseUrl+'/index');
  }
  //不是首页,则添加动态路由(此时不确定用户去的是那个页面)
  else if(newRouterArr && num){
    
    
    num = 0;
    //配置动态路由 newRouterArr 中已经配置好了name和path,现在只需要指向组件对象
    newRouterArr.map((item,index)=>{
    
    
      //组件的储存位置是  src/view/business/组件名.vue
      newRouterArr[index].component = ()=>import('@/view/business/'+item.name+'.vue');
    })
    //添加路由
    router.addRoutes(newRouterArr);
    //跳转到相应页面
    router.replace(to.path);
  }
  else{
    
    
    next();
  }
  

Promiseエラーを解決する

これのいくつかの小さなパートナーにはリダイレクトエラーPrimiseがあります。次に、メソッドのPromiseリダイレクトエラー防止するために接続します

//解决Promise报错
const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
    
    
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}

小さなオンラインパートナーが言う信じてはいけないルータ-VUEアップグレードのみに依存し、Windowsの再インストールがつながります、

OK。これで基本的な紹介は終わりました
ので、よければコメントしてください。
嫌い、理由を説明してください。
感謝。

おすすめ

転載: blog.csdn.net/DoLi_JIN/article/details/106409270