我有一个非登录用户无法访问的组件。我将此逻辑实现到beforeCreate
钩子中。问题是,这并不能阻止组件继续加载,我想要它。
这是我的代码:
<script>
export default {
beforeCreate: function () {
if (this.$root.auth.user === null) {
this.$router.push({ name: 'auth.login' })
}
},
mounted: function () {
// some code that SHOULD NOT be processed
// if the user isn't authenticated
}
}
</script>
我做错了什么?
答案 0 :(得分:3)
您应该将beforeCreate功能移动到路由器本身。 这是我的Auth捕获
router.beforeEach(
(to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
// if route requires auth and user isn't authenticated
if (!store.state.Authentication.authenticated) {
let query = to.fullPath.match(/^\/$/) ? {} : { redirect: to.fullPath }
next(
{
path: '/login',
query: query
}
)
return
}
}
next()
}
)
它允许我使用我的路线定义来处理身份验证和访客展示位置。
{
path: '/',
component: load('Template'),
children: [
{ path: '', component: load('Dashboard'), name: 'Dashboard' }
],
meta: { requiresAuth: true }
},
{
path: '/login',
component: load('Authentication/Login'),
name: 'login'
},
通过在Vue初始化组件之前将其置于路由器中,这将停止处理任何组件级事件。