Часы Nuxt не перенаправляют

#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'})