当前位置:  开发笔记 > 编程语言 > 正文

VueJS 2,路由器后卫

如何解决《VueJS2,路由器后卫》经验,为你挑选了1个好方法。

我的索引路由定义为:

{ path: '/', adminOnly: false, component: Main },

有没有办法访问'adminOnly'属性?

在这段代码中似乎没有办法这样做:

routes.beforeEach((to, from, next) => {
    console.log(to)
    next();
});

我的路线档案:

import Vue from 'vue';
import VueRouter from 'vue-router';

import Main from '../components/Main.vue';
import About from '../components/About.vue';

const NotFoundException = {
    template: '
Route Was Not Found
' }; Vue.use(VueRouter); const routes = new VueRouter({ mode: 'history', hashbang: false, linkActiveClass: 'active', base: '/jokes', routes: [ { path: '/', adminOnly: false, component: Main }, { path: '/about', adminOnly: false, component: About }, { path: '*', adminOnly: false, component: NotFoundException } ] }); routes.mode = 'html5'; routes.beforeEach((to, from, next) => { // CHECK IF ADMINONLY EXISTS next(); }); export default routes;

我确实通过添加一个adminOnly.js混合来获得解决方案,其中包含以下代码:但是,如果我要将用户重定向到登录页面(如果不是管理员),则必须将mixin添加到每个组件.//只是一个测试var isAdmin = false;

export default {
        beforeRouteEnter (to, from, next) {
            if(!isAdmin) {
                next((vm) => {
                   vm.$router.push('/login');
                });
            }
        }
    }

t_dom93.. 10

是的,有更好的方法来处理这个问题.每个路由对象都可以有meta字段.只需adminOnly在meta对象中包装属性:

 routes: [
        { path: '/', meta: { adminOnly: false }, component: Main },
        { path: '/about', meta: { adminOnly: false }, component: About },
        { path: '*', meta: { adminOnly: false }, component: NotFoundException }
    ]

检查管理员权限的路线:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.adminOnly)) {
    // this route requires auth, check if logged in
    // if not, redirect to login page.
  }
}

有关更多信息,请查看文档,我在jsFiddle上创建了一些示例



1> t_dom93..:

是的,有更好的方法来处理这个问题.每个路由对象都可以有meta字段.只需adminOnly在meta对象中包装属性:

 routes: [
        { path: '/', meta: { adminOnly: false }, component: Main },
        { path: '/about', meta: { adminOnly: false }, component: About },
        { path: '*', meta: { adminOnly: false }, component: NotFoundException }
    ]

检查管理员权限的路线:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.adminOnly)) {
    // this route requires auth, check if logged in
    // if not, redirect to login page.
  }
}

有关更多信息,请查看文档,我在jsFiddle上创建了一些示例

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有