热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue路由动态权限

vue路由动态权限1.菜单路由全由后端接口返回1.1第一步:拿到后端返回数据login(){this.$http.post(apipermissiongetMenu,this.

vue 路由动态权限

1.菜单路由全由后端接口返回

1.1 第一步:拿到后端返回数据


login() {this.$http.post('api/permission/getMenu', this.form).then(res => {res = res.dataif (res.code === 20000) {调用vuex方法this.$store.commit('setMenu', res.data.menu)this.$store.commit('addMenu', this.$router)} else {this.$message.warning(res.data.message)}})}返回数据格式:menu: [{path: '/',name: 'home',label: '首页',icon: 's-home',url: 'Home/Home'},{path: '/video',name: 'video',label: '视频管理页',icon: 'video-play',url: 'VideoManage/VideoManage'},{path: '/user',name: 'user',label: '用户管理页',icon: 'user',url: 'UserManage/UserManage'},{label: '其他',icon: 'location',children: [{path: '/page1',name: 'page1',label: '页面1',icon: 'setting',url: 'Other/PageOne'},{path: '/page2',name: 'page2',label: '页面2',icon: 'setting',url: 'Other/PageTwo'}]}],

1.2:使用vuex传递数据并储存

import COOKIE from 'js-COOKIE'
export default {state: {currentMenu: null,menu: []},mutations: {setMenu(state, val) {state.menu = valCOOKIE.set('menu', JSON.stringify(val))},addMenu(state, router) {if (!COOKIE.get('menu')) {return}let menu = JSON.parse(COOKIE.get('menu'))state.menu = menulet currentMenu = [{path: '/',component: () => import(`@/views/Main`),children: []}]menu.forEach(item => {if (item.children) {item.children = item.children.map(item => {item.component = () => import(`@/views/${item.url}`)return item})currentMenu[0].children.push(...item.children)} else {item.component = () => import(`@/views/${item.url}`)currentMenu[0].children.push(item)}})router.addRoutes(currentMenu)},

1.3:缩减router.js,值留一个登录

import Vue from 'vue'import Router from 'vue-router'Vue.use(Router)export default new Router({routes: [{path: '/login',name: 'login',component: () => import('@/views/Login/Login')}]})

1.4:main.js里防止刷新丢失

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'// 全局配置
import '@/assets/scss/reset.scss'
import 'element-ui/lib/theme-chalk/index.css'
import http from '@/api/config'
import './mock'// 第三方包
import ElementUI from 'element-ui'Vue.use(ElementUI)
Vue.prototype.$http = httpVue.config.productionTip = falserouter.beforeEach((to, from, next) => {// 防止刷新后vuex里丢失tokenstore.commit('getToken')// 防止刷新后vuex里丢失标签列表tagListstore.commit('getMenu')let token = store.state.user.token// 过滤登录页,防止死循环if (!token && to.name !== 'login') {next({ name: 'login' })} else {next()}
})new Vue({router,store,render: h => h(App),created() {//防止刷新丢失store.commit('addMenu', router)}
}).$mount('#app')

推荐阅读
  • vue使用
    关键词: ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
author-avatar
闲忙的飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有