Помогите в роутинге сделать редирект
Делаю бекенд для проекта на ангуляре, но ангуляр впервые вижу и подсказки прошу! Логика такая: если человек (переменная 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, время: 11:58. |