Помогите в роутинге сделать редирект
Делаю бекенд для проекта на ангуляре, но ангуляр впервые вижу и подсказки прошу! Логика такая: если человек (переменная current_user) войден, то его должно со страниц входа, регистрации, забыл пароль и прочих таких редиректить на основную страницу, и наоборот: если не авторизован - то на вход. Роутингов много, 80, в каждом я прописал такой резолв:
resolve: { signed_in: ['$location', function ($location) { if(!current_user){$location.path('/access/signin')} }] } И это сработало! Теперь если у него не все данные заполнены, то должно не пускать со страницы профиля, пока не заполнит: resolve: { signed_in: ['$location', function ($location) { if(!current_user){ $location.path('/access/signin') } else if(current_user.mobile == '') { $location.path('/app/page/profile') } }] } Так как все нужное заполнено во время регистрации, то нужен только мобильный. И это не работает! Редиректит только если по адресу перейти, а потом при кликах игнорирует. Если console.log рядом с $location.path поставить, то логит, но ангуляр игнорирует. return false не помог. |
Думаю как вариант сделать на jquery, чтобы все ссылки работать перестали, а после заполнения ней же обратно блок с ссылок убрать, что думаете?
|
jquery никак не помог, спс странному устройству ангуляра
Но получилось в итоге, вдруг кому пригодится: angular.module('app') .run(function($rootScope, $location, $state) { $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) { if(current_user){ if(current_user.mobile == '' && toState.name != 'app.page.profile'){ e.preventDefault(); $state.go('app.page.profile'); e.targetScope.$watch('$viewContentLoaded', function(){ $("[ui-butterbar]").removeClass('active'); }) } } else { if(!~['access', 'access.signin', 'access.signup', 'access.forgotpwd', 'access.resetpwd'].indexOf(toState.name)) { e.preventDefault(); $state.go('access.signin'); } } }) }) |
Часовой пояс GMT +3, время: 01:12. |