2017-01-26 7 views
0

У меня есть такой код:Vue2 маршрутизатор не работает, когда тип вручную

created: function() { 
    if(!localStorage.hasOwnProperty('auth_token')) { 
     router.replace({name: 'login'}); 
    } else { 
     if(router.history.current.name == 'login') { 
      router.push({name: 'allVideos'}); 
     } 
    } 
} 

внутри моего Vue корня экземпляра.

Поэтому, когда страница загружается, она проверяет токен. Когда у меня нет токена, я перенаправляюсь на страницу входа. Если у меня есть токен, перенаправление на allVideos, если на странице входа или вообще не перенаправляется, если на других страницах.

Все работает нормально, когда я сделал обновление, прохожу через некоторые кнопки и т. Д. Но когда я вручную набираю/#/login и нажимаю кнопку ввода страницы Vue, но auth_token существует. И когда я печатаю вручную, он не добирается до метода created. Когда я снова набираю/#/login со страницы входа, он начинает работать ... Любые идеи ??? Благодаря

Update: Ну я пытался использовать навигационные охранники

router.beforeEach((to, from, next) => { 
    if(localStorage.hasOwnProperty('auth_token')) { 
     if(to.name == 'login') { 
      next({name: 'allVideos'}); 
     } 
    } else { 
     if(to.name != 'login') { 
      next({path: '/login'}); 
     } 
    } 
     next(); 

}); 

код теперь намного чище, как для меня, но проблема все еще там, когда я печатаю вручную

+1

Я думаю, что концепция не является правильным here.Instead положить эти вещи в Vue, например, я думаю, вы должны идти с каким-то навигацией охранником, в вашем случае 'router.beforeEach' должны делать трюк https://router.vuejs.org/en/advanced/navigation-guards.html –

+0

Вы имеете в виду вместо того, чтобы добавлять такой код в метод 'created', я должен использовать' beforeEach' hook? проверит, не читал об этом еще. Благодаря! –

+0

Да, посмотрите этот пример здесь https://github.com/TahaSh/spa-forum/blob/master/resources/assets/js/main.js#L56 - (обратите внимание, что это Vue 1 и старый код маршрутизатора, но он может помочь вам) beforeEach не является жизненным циклом крючка, это навигационная защита от экземпляра маршрутизатора. –

ответ

0

в вашем код, next() называется 2 раза, поэтому он создает проблему. Вы можете попробовать этот код:

router.beforeEach((to, from, next) => { 
    if(localStorage.hasOwnProperty('auth_token')) { 
    if(to.name === 'login') { 
     next({name: 'allVideos'}); 
    } 
    } else if(to.name !== 'login') { 
    next({path: '/login'}) 
    } else { 
    next(); 
    } 
});