Vue Router: если аргумент next () и to равен, почему навигация не подтверждена? - PullRequest
0 голосов
/ 18 января 2019

Я обнаружил, что моя функция 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 голосов
/ 20 января 2019

Простой ответ: потому что next -функция имеет различное значение (цели).

next -функция подобна диспетчеру, который говорит поезду, куда идти.

Вызов next -функции с тем же to -рутом имеет значение только тогда, когда состояние приложения изменяется между этими вызовами (куки были удалены, значения localStorage изменены, сеанс завершен и т. Д.), В противном случае вы получите предупреждение о бесконечном цикле / ошибка.

Есть ли вариант использования для вызова next () с тем же аргументом, что и текущее значение до?

Да, есть несколько вариантов использования. Один из них можно найти в этом вопросе и ответе SO. - динамически изменить компонент, отвечающий за рендеринг вида.

0 голосов
/ 18 января 2019

Один из следующих шаблонов: метасвойство на самом маршруте , а затем проверка, установлено ли это свойство в хуке:

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

И так какВаш логин, регистр и забытый пароль на страницах не требуют аутентификации, вы прерываете цикл

...