我的索引路由定义为:
{ 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上创建了一些示例
是的,有更好的方法来处理这个问题.每个路由对象都可以有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上创建了一些示例