addRoutes動態添加路由


router路由index.js


基本路由(不受權限控制的)
export const routes = [
  {
    path: "/login",
    component: ()=>import('../views/login/index.vue'),
    meta:{title:'登陸頁'}
  },
];

權限路由
export const perRouter = [
    {
      path: "/",
      component: Layout,
      redirect:'/advert',
      roles:[],
      children:[
        {
          path: "/advert",
          component:()=>import('@/views/advert/advert.vue'),
          meta:{title:'廣告管理',icon:'el-icon-c-scale-to-original'},
          roles:['select:advert'],
         },
      ]
    }   
]



const router = new VueRouter({
  mode: "hash",
  base: process.env.BASE_URL,
  routes:routes,
});
 
        
export default router;
 
 
 
 
1.登陸成功后調用權限接口獲取當前賬號的權限,addRoutes添加路由
getPermossion().then(res=>{
    localStorage.setItem('permission',JSON.stringify(res.result.list)) //存儲權限
    let myRou =  Permiss(res.result.list,perRouter,this.$router)  //調用公共方法,判斷權限,addRoutes(最新的路由)
    this.$router.push("/advert");    
})
Permiss公共方法中要把menu菜單渲染的數據存到vuex中,因為router路由不是響應式數據,沒有觀察和訂閱,菜單就不會更新,
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
    state:{
        menu:[]
    },
    getters:{
        menu:state=>state.menu
    },
    mutations:{
        menuChange:(state,data)=>{
            state.menu = data
        }
    }
})
菜單組件:
computed:{
    getMenu(){            
       if(this.$store.state.menu){
          return this.$store.state.menu[0].children
       }
    }
},
 
 
2.刷新頁面的時候再次調用公共方法,獲取最新權限路由,app.vue中的create函數或者路由中調用(因為刷新頁面的時候路由會重新實例化,之前添加的沒有了)
let promissList = JSON.parse(localStorage.getItem('permission'))
if(localStorage.getItem('permission')){
  Permiss(promissList,perRouter,router)
}
3.退出登錄的時候要清除addRoutes添加的路由(location.reload()或者網上的跟換router.matcher方法)
 
遇到問題:登錄的時候把判斷后的路由存到了本地,刷新的時候取路由,頁面依舊空白,路由不能存到本地,組件會被轉換成字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM