100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > vue vuex vue-rouert 权限路由(详细教程)

vue vuex vue-rouert 权限路由(详细教程)

时间:2020-11-04 07:04:13

相关推荐

vue vuex vue-rouert 权限路由(详细教程)

web前端|js教程

vue,vuex,vue,router,路由权限,vue,路由权限

web前端-js教程项目地址: vue-simple-template

辅导 网站 源码,vscode 数据可视化,ubuntu修复raid,tomcat实现负载均衡,科研之友爬虫,php传输xml数据,浙江seo优化欢迎来电,免费php软件网站系统下载,织梦html5网络公司模板lzw

共三个角色:adan barbara carrie 密码全是:123456

400电话网站源码,vscode如何做成手机端,ubuntu 使用体验,tomcat中8009端口,涂山爬虫,php代码书写规范,天津什么是seo优化答疑解惑,网站安全暗链lzw

adan 拥有 最高权限A 他可以看到 red , yellow 和 blue 页面(共三个页面)

微信幻灯片源码,vscode 无法连接,ubuntu虚拟网络,tomcat日志清除,sqlite c v,服务器运行慢,腾讯通 通达oa 插件,哪个前端框架表格,爬虫防沉迷,php培训在哪里,seo排名不知是网站排名,网站的文章标题太短怎么弄,微信 网页看源码,网站首页模板下载,iframe 页面弹出框代码,会员管理系统网站源码,.net程序代码lzw

barbara 拥有 权限B 他可以看到 red 和 yellow 页面

carrie 拥有 权限C 他可以看到 red 和 blue 页面

技术栈

webpack ---- 打包神器vue ---- JavaScript 框架vuex ---- 实现不同组件间的状态共享vue-router ---- 页面路由babel-polyfill ---- 将ES6代码转为ES5代码normalize.css ---- 重置掉该重置的样式element-ui ---- UI组件库

项目初始化

# cd 到项目文件夹cd weven-simple-template# 安装依赖 (本项目还安装了其他依赖详情 请见 package.json 文件)npm install# 运行项目npm run dev

项目结构

vue-cil 脚手架初始化项目后,我只修改过src文件夹

src├── App.vue ---- 页面入口├── api ---- api请求│ └── login.js ---- 模拟json对象数据├── assets ---- 主题 字体等静态资源│ └── logo.jpg├── components ---- 组件│ ├── index.vue│ └── login.vue ├── main.js ---- 初始化组件 加载路由├── router ---- 路由│ └── index.js└── store ---- vuex状态管理 ├── getters.js ├── index.js └── modules └── login.js

重点:

动态路由的关键在于router配置的 meta字段 和vuex的 状态共存 (不懂可以先查看官方文档)

router/index.js

// 初始化路由export default new Router({ routes: [ { path: /login, name: Login, component: Login } ] });// 动态路由 meta 定义了roleexport const powerRouter =[ { path: /,redirect:/red, name: index,component: Index,hidden:false, children: [ { path: /red, name: ed, component: red,}, { path: /yellow, name: yellow, component: yellow, meta: {role: B}}, { path: /blue, name: lue, 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 actions部分

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([ ewrouter ])

此项目拿去 捋清楚 vue+vuex+vue-router 的关系是没问题的,这可以说的超级简单的版本,适合初学。上面的内容说的重点,其实也算是项目的全部啦

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在js中如何实现上传并压缩图片功能(详细教学)

使用JS如何计算两个时间相差数

在vue-cli webpack中如何引入jquery(详细教学)

在vue中有关文件使用方式

纯js如何生成下拉列表

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。