vue vuex vue-rouert后台项目——权限路由(适合初学)


Posted in Javascript onDecember 29, 2017

项目地址: vue-simple-template

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

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

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

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

vue vuex vue-rouert后台项目——权限路由(适合初学)

技术栈

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.png
├── 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 定义了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  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([
 'newrouter'
 ])

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

项目地址: vue-simple-template

总结

以上所述是小编给大家介绍的vue vuex vue-rouert后台项目——权限路由(适合初学),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS逆序遍历实现代码
Dec 02 Javascript
javascript中Number对象的toString()方法分析
Dec 20 Javascript
浅谈jQuery中height与width
Jul 06 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
Bootstrap超大屏幕的实现代码
Mar 22 Javascript
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 Javascript
javascript实现用户必须勾选协议实例讲解
Mar 24 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 #Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 #Javascript
Angular实现点击按钮控制隐藏和显示功能示例
Dec 29 #Javascript
js实现手机web图片左右滑动效果
Dec 29 #Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 #Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 #Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 #Javascript
You might like
用PHP生成html分页列表的代码
2007/03/18 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python实现批量压缩图片
2018/01/25 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
python requests.get带header
2020/05/05 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
客服服务心得体会
2013/12/30 职场文书
服务承诺书格式
2014/05/21 职场文书
文明城市创建标语
2014/06/16 职场文书
2014年应急工作总结
2014/12/11 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书