Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Помогите в роутинге сделать редирект (https://javascript.ru/forum/angular/58960-pomogite-v-routinge-sdelat-redirekt.html)

Romaboy 20.10.2015 00:05

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

Romaboy 20.10.2015 23:49

Думаю как вариант сделать на jquery, чтобы все ссылки работать перестали, а после заполнения ней же обратно блок с ссылок убрать, что думаете?

Romaboy 21.10.2015 04:17

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.