#vue.js #nuxt.js #router
Вопрос:
У меня есть приложение Nuxt со страницей профиля. На этой странице есть наблюдатель, который проверяет store.state.auth.Неутвержденная ценность. Если это ложь, наблюдатель должен перенаправить на страницу входа в систему. Странно то, что, хотя условие оценивается правильно, оно не перенаправляется на вход в систему.
watch: { '$store.state.auth.isAuthenticated': { imediate: true, deep: false, handler(newVal) { if( !newVal ) this.$router.push({'name': 'login'}); } }, },
Как я писал выше, условие оценивается правильно, но оно не вызывает $router.push(). Я этого не понимаю. Что не так с этим кодом?
РЕДАКТИРОВАТЬ: Это создает бесконечный цикл в auth.js промежуточное программное обеспечение.
import { createNavigationGuard } from "~/plugins/navigation-guard.js"; export default function (context) { if (process.client) { const watchedStores = []; const unwatchStore = (unwatch) =gt; { if (typeof unwatch === "function") { unwatch(); } }; // TODO: Find out whether the watchers persist after each route // Unwatch previous route - this could be necessary for performance console.log('watchedStores'); console.log(watchedStores); unwatchStore(watchedStores.pop()); const unwatch = context.store.watch( (state) =gt; { return state.auth.isAuthenticated; }, (isAuthenticated) =gt; { createNavigationGuard(context, isAuthenticated); }, { immediate: true, } ); // it's not necessary to reassign unwatched variable to undefined with array watchedStores.push(unwatch); } if (process.server) { createNavigationGuard( context, context.store.state.auth.isAuthenticated ); } }
Ответ №1:
вы пытались создать метод для перенаправления и просто вызвать этот метод в своем обработчике часов?
поэтому вместо этого.$router.push сделайте это.redirectUser()
и в методе ‘redirectUser()’ сделайте:
this.$router.push({'name': 'login'})