如何在Vue中停止组件加载和重定向?

时间:2017-09-18 21:38:26

标签: javascript vue.js vue-component vue-router

我有一个非登录用户无法访问的组件。我将此逻辑实现到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>

我做错了什么?

1 个答案:

答案 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初始化组件之前将其置于路由器中,这将停止处理任何组件级事件。