项目地址:vue-simple-template 共三个角色:adan barbara carrie 密码全是:123456

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

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.png
├── components      ---- 组件
│   ├── index.vue
│   └── login.vue
├── main.js         ---- 初始化组件 加载路由
├── router          ---- 路由
│   └── index.js
└── store           ---- vuex状态管理├── getters.js├── index.js└── modules└── login.js
复制代码

重点:

动态路由的关键在于router配置的meta字段和vuex的暴露在外的getter字段

// ----  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'}}]}
];
复制代码
// ----  main.js  ----
router.beforeEach((to, from, next) => {if(store.getters.role){ //判断role 是否存在if(store.getters.newrouter.length !== 0){  next() //resolve 钩子}else{let newrouterif (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 = powerRouternewrouter[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 感觉还不错的话就请给个 star 吧~ 谢谢

有什么问题欢迎提问~

转载于:https://juejin.im/post/5a4da656f265da431e172d94

vue vuex vue-router后台项目——权限路由(超详细简单版)相关推荐

  1. vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据

    vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据 在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今 ...

  2. Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)

    Python新手爬虫训练小项目<爬取彼岸图网>(超详细讲解版) 这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频 ...

  3. 上传项目到GitHub(超详细)

    上传项目到GitHub(超详细) 大家好,今天我们来学习一下如何把本地项目上传到GitHub ,好好看,好好学,超详细的 第一步 注册github账号 第二步 下载一个git工具并安装 第三步 注册好 ...

  4. Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)

    继上一篇文章创建了项目后,本章我们进行项目的打包工作. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 打包步骤 1 准备环境 1.1 安装`PyInsta ...

  5. 【vue.js】vue后台项目权限功能实现思路

    常见的后台系统中,会存在不同的用户角色,如超级管理员.普通用户,这些用户角色的权限是不同的,所以可以操作或显示的模块也不一致.这里采用如下后台管理系统框架作为模板 地址:https://github. ...

  6. Vue vscode 创建 vue 项目流程【超详细】

    文章目录 一.安装node 二.配置淘宝镜像 三.配置 vscode(win10) 四.全局安装脚手架 五.创建项目 六.进入项目 七.项目结构 一.安装node 请在官网下载安装:https://n ...

  7. Web项目(Vue)部署到阿里云服务器【超详细】

    超详细Vue项目部署篇!!! 小白的部署之路 前段时间白嫖了一年的阿里云服务器,想着手上有个项目,那就部署上去吧.找了很多教程,没有一篇是完整细致的,对于小白的我来说太难了,然后就进行了一天的踩坑之路 ...

  8. vue学习(八)vue2.0路由vue-router的简单入门使用

    vue-router官网中文文档:Vue Router Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.路由实际上就是可以理 ...

  9. vue 通信、传值的多种方式(超详细)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.通过路由带参数进行传值 ①两个组件 A和B,A组件通过query把orderId传递给B组件(触 ...

最新文章

  1. vmware 12中安装 OpenWRT 及 网络配置
  2. C++中的赋值操作符重载
  3. Kudu:为大数据快速分析量身定制的 Hadoop 存储系统
  4. JSP页面元素,内置对象及request详解
  5. 零点是结束,也是开始。
  6. iOS开源项目周报0302
  7. 网易云课堂 oracle,网易云课堂DBA学习笔记 (一) 数据库基础
  8. [转载]WiFi有死角? 巧用旧无线路由器扩展覆盖
  9. springboot如何接收Vue 的post提交请求
  10. 大规模定制家具实施ERP的必要性
  11. 通讯录搜索排序 类似微信通讯录
  12. 10.24-10.25 交流会小日记
  13. 怎么选择Java培训机构?
  14. 欧洲之星Fotona 4D是什么,欧洲之星Fotona 4和热玛吉哪个好
  15. mysql查询数据的总记录数
  16. hbuilder app教程
  17. jython 导入java包_在jython中导入java类
  18. Unity3d实现手动选择动态加载PPT文件并展示
  19. python menuconfig_如何配置 ESP32 Menuconfig
  20. div、Flex、element-ui-layout页面布局

热门文章

  1. 企业云桌面-07-安装虚拟机-001-Win701
  2. IIS7 如何设置默认首页
  3. Exchange动态同步中的INTERNET_29错误代码
  4. Rust crates.io换国内镜像源
  5. NFS简单应用场景及简单的环境搭建
  6. 使用jQuery操作DOM
  7. 微软牛津计划-语音转文本-文本转语音代码和实现
  8. loadrunner中创建唯一随机数
  9. 关于路径的使用,assi下载和
  10. HLG 1539 选课