Vue JS (router.beforeEach) не удалось преобразовать исключение в строку - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь использовать router.beforeEach с localStorage.Если в localStorage есть данные, я хочу пропустить домашнюю страницу.Если данных нет, зайдите на домашнюю страницу.Я могу напечатать данные с помощью console.log, но процесс маршрутизатора завершается с ошибкой

[vue-router] необнаруженная ошибка во время навигации по маршруту> не удалось преобразовать исключение в строку.

Как мне управлять навигацией?

Мой router.js:

Vue.use(Router);

const router = new Router({
    routes: [{
            path: '/',
            name: 'index',
            components: {
                default: Index,
                header: MainNavbar
            },
            props: {
                header: {
                    colorOnScroll: 400
                }
            }
        },
        {
            path: '/landing',
            name: 'landing',
            components: {
                default: Landing,
                header: MainNavbar,
                footer: MainFooter
            },
            props: {
                header: {
                    colorOnScroll: 400
                },
                footer: {
                    backgroundColor: 'black'
                }
            }
        },
        {
            path: '/login',
            name: 'login',
            components: {
                default: Login,
                header: MainNavbar
            },
            props: {
                header: {
                    colorOnScroll: 400
                }
            }
        },
        {
            path: '/profile',
            name: 'profile',
            components: {
                default: Profile,
                header: MainNavbar,
                footer: MainFooter
            },
            props: {
                header: {
                    colorOnScroll: 400
                },
                footer: {
                    backgroundColor: 'black'
                }
            }
        }
    ],
    scrollBehavior: to => {
        if (to.hash) {
            return {
                selector: to.hash
            };
        } else {
            return {
                x: 0,
                y: 0
            };
        }
    }
});

router.beforeEach((to, from, next) => {
    let adres = JSON.parse(localStorage.getItem('adres'));
    if (!adres) {
        next('/');
    } else {
        next('/login');
    }
});

export default router;

Пример локальных данных:

{  
   "id":1,
   "adi":"Demo",
   "soyadi":"Sef",
   "telefon":"05322375277",
   "adres":"Girne Mahallesi 6022 Sk. No:22 Kahta/Adıyaman",
   "fotograf":"http://localhost:8000/media/kullanici/sef/demosef/chef-1.jpg"
}

1 Ответ

0 голосов
/ 21 октября 2018

Вы создаете бесконечный цикл, где ваш beforeEach охранник срабатывает снова и снова.В beforeEach он проверяет наличие адреса в localStorage и перенаправляет на / или /login.Затем еще раз перед вводом нового маршрута вызывается beforeEach и проверяется, есть ли адрес и перенаправления.Процесс повторяется до бесконечности.Вам нужно позвонить next() без каких-либо параметров где-нибудь в вашей beforeEach охране, чтобы подтвердить нормальную навигацию.Так что вы можете сделать что-то вроде этого ..

router.beforeEach((to, from, next) => {
  if (to.path == '/') {  // If we are entering the homepage.
    let adres = JSON.parse(localStorage.getItem('adres'));
    if (!adres) {
      next();
    } else {
      next('/login');
    }
  } else {  // Not entering the homepage. Proceed as normal.
    next()
  }
});
...