In diesem Artikel wird hauptsächlich das Vue-Vue-Router-Backend-Projekt vorgestellt – Berechtigungsrouting. Durch diesen Artikel können Sie die Beziehung zwischen Vue + Vue-Router klar verstehen. Diese Version ist sehr einfach und für Anfänger geeignet Ich brauche es. Als Referenz hoffe ich, dass es jedem helfen kann.
Projektadresse: vue-simple-template
Es gibt insgesamt drei Rollen: adan barbara carrie Die Passwörter lauten alle: 123456
adan hat die höchste Autorität A. Er kann rote, gelbe und blaue Seiten sehen (insgesamt drei Seiten)
Barbara hat die Erlaubnis B. Er kann die roten und gelben Seiten sehen
Carrie hat die Erlaubnis C. Er kann die roten sehen und blaue Seiten
Technology Stack
webpack ---- 打包神器 vue ---- JavaScript 框架 vuex ---- 实现不同组件间的状态共享 vue-router ---- 页面路由 babel-polyfill ---- 将ES6代码转为ES5代码 normalize.css ---- 重置掉该重置的样式 element-ui ---- UI组件库
Projektinitialisierung
# cd 到项目文件夹 cd weven-simple-template # 安装依赖 (本项目还安装了其他依赖详情 请见 package.json 文件) npm install # 运行项目 npm run dev
Projektstruktur
vue-cil-Gerüstinitialisierung Nach dem Projekt habe ich nur den src-Ordner geändert
src ├── App.vue ---- 页面入口 ├── api ---- api请求 │ └── login.js ---- 模拟json对象数据 ├── assets ---- 主题 字体等静态资源 │ └── logo.png ├── components ---- 组件 │ ├── index.vue │ └── login.vue ├── main.js ---- 初始化组件 加载路由 ├── router ---- 路由 │ └── index.js └── store ---- vuex状态管理 ├── getters.js ├── index.js └── modules └── login.js
Wichtige Punkte:
Dynamisches Routing Der Schlüssel liegt darin, dass das vom Router konfigurierte Metafeld und der Status von Vuex nebeneinander existieren (wenn Sie es nicht verstehen, können Sie zuerst die offizielle Dokumentation überprüfen)
Router/Index .js
// 初始化路由 export default new Router({ routes: [ { path: '/login', name: 'Login', component: Login } ] }); // 动态路由 meta 定义了role export const powerRouter =[ { path: '/',redirect:'/red', name: 'index',component: Index,hidden:false, children: [ { path: '/red', name: 'red', component: red,}, { path: '/yellow', name: 'yellow', component: yellow, meta: {role: 'B'}}, { path: '/blue', name: 'blue', component: blue, meta: {role: 'C'}} ] } ];
store/modules/lo
Logins({ commit }, info){ return new Promise((resolve, reject) => { let data={}; loginByUserInfo.map(function (item) { //获取所以用户信息 if(info.username === item.username || info.pew === item.pew){ commit('SET_USERNAME',item.username); //将username和role进行存储 sessionStorage.setItem('USERNAME', item.username); //存入 session commit('SET_ROLE',item.role); sessionStorage.setItem('ROLE', item.role); return data={username:item.username,introduce:item.introduce}; }else{ return data; } }); resolve(data); }).catch(error => { reject(error); }); }, Roles({ commit }, newrouter){ return new Promise((resolve, reject) => { commit('SET_NEWROUER',newrouter); //存储最新路由 resolve(newrouter); }).catch(error => { reject(error); }); },
gin.js-Aktionsabschnitt
Logins({ commit }, info){ return new Promise((resolve, reject) => { let data={}; loginByUserInfo.map(function (item) { //获取所以用户信息 if(info.username === item.username || info.pew === item.pew){ commit('SET_USERNAME',item.username); //将username和role进行存储 sessionStorage.setItem('USERNAME', item.username); //存入 session commit('SET_ROLE',item.role); sessionStorage.setItem('ROLE', item.role); return data={username:item.username,introduce:item.introduce}; }else{ return data; } }); resolve(data); }).catch(error => { reject(error); }); }, Roles({ commit }, newrouter){ return new Promise((resolve, reject) => { commit('SET_NEWROUER',newrouter); //存储最新路由 resolve(newrouter); }).catch(error => { reject(error); }); },
main.js
router.beforeEach((to, from, next) => { if(store.getters.role){ //判断role 是否存在 if(store.getters.newrouter.length !== 0){ next() //resolve 钩子 }else{ let newrouter if (store.getters.role == 'A') { //判断权限 newrouter = powerRouter } else { let newchildren = powerRouter[0].children.filter(route => { if(route.meta){ if(route.meta.role == store.getters.role){ return true } return false }else{ return true } }); newrouter = powerRouter newrouter[0].children = newchildren } router.addRoutes(newrouter) //添加动态路由 store.dispatch('Roles',newrouter).then(res => { next({ ...to }) }).catch(() => { }) } }else{ if (['/login'].indexOf(to.path) !== -1) { next() } else { next('/login') } } })
components/index.vue
// mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性 ...mapGetters([ 'newrouter' ])
Nehmen Sie dieses Projekt, um vue+vuex zu löschen. Die Beziehung zwischen +vue-router ist kein Problem. Man kann sagen, dass es sich um eine supereinfache Version handelt, die für Anfänger geeignet ist. Die oben genannten Schlüsselpunkte sind eigentlich das gesamte Projekt
Projektadresse: vue-simple-template
Verwandte Empfehlungen:
Detaillierte Erläuterung der Schritte zur SPA-Implementierung für die Vue-Routing-Verschachtelung
Beispiel für eine ausführliche Erklärung der Vue-Montageroute zur Kopfnavigation
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispiels für das Berechtigungsrouting von vue vuex vue-rouert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!