Vue Router:如果next()和to的参数相等,为什么不确认导航?

时间:2019-01-18 16:25:11

标签: vue-router

我发现我的beforeEach函数充满了检查,以查看to的值是否与将传递给next()的值匹配以防止无限循环。例如,如果我想让用户登录(如果他们没有登录),则不能使用:

if (!user.isLoggedIn) {
    return next({ name: 'login' });
}

我必须使用:

if (!user.isLoggedIn) {
    if (to.name !== 'login') {
        return next({ name: 'login' });
    }

    return next();
}

在我看来,这似乎很奇怪和不必要。关于如何使用Vue Router,我是否缺少某些东西?

是否存在用与next()的当前值相同的参数调用to的用例?

2 个答案:

答案 0 :(得分:0)

遵循的一种模式是包括一个meta property on the route itself,然后检查该属性是否在挂钩中设置:

If(!user.isLoggedIn && to.route.meta.requiresAuth) 
    next({name: 'login'});
else
    next();

而且由于您的登录,注册和忘记密码页面不需要身份验证,因此您会陷入循环

答案 1 :(得分:0)

简单的答案:因为Reshape-函数具有不同的含义(目标)。

  

reshape = keras.layers.Reshape(300 * max_seq_length + 300, 1) encoded_left = reshape(encoded_left) encoded_right = reshape(encoded_right) 功能就像一个调度员,正在告诉火车去哪里   去。

仅在这些调用之间应用程序状态发生变化(删除了Cookie,更改了LocalStorage值,会话结束等)时,使用相同的next路由调用next-函数才有意义。无限循环警告/错误。

  

是否存在用例参数与next()相同的用例调用next()   to的当前值?

是的,有一些用例。可以在此SO quesion and answer.中找到其中之一-动态更改负责视图渲染的组件。