Модель AngularJS не обновляется на $ state.go

Я создал что-то вроде входа в систему и хочу, чтобы пользователь перешел на страницу панели управления после успешного входа в систему. На данный момент все работает, как ожидалось, за исключением того, что модель не обновляется, пока я не перезагружу страницу панели инструментов.

Я написал службу для обработки запросов $ http:

    abcApp.service('Login', function($q, $http){

            return({
                login:login
            })

            var headers = { 'Content-Type': 'application/x-www-form-urlencoded' };

            function login(login){
                    var formVals = {
                        username: login.username.$modelValue,
                        password: login.password.$modelValue,
                        remember: login.remember.$modelValue,
                    }
                    var request = $http.post('assets/php/do_login.php', formVals, null, headers);
                    return( request.then( handleSuccess, handleError ) );
            }

            function handleSuccess( response ) {
                 return( response.data );
            }

            function handleError( response ) {
                if (
                    ! angular.isObject( response.data ) ||
                    ! response.data.message
                    ) {
                    return( $q.reject( "An unknown error occurred." ) );
                }

                // Otherwise, use expected error message.
                return( $q.reject( response.data.message ) );

            }

  });

Вот контроллер, который должен обрабатывать вход в систему:

   $scope.doLogin = function (){
                Login.login($scope.login_form)
                .then(function(data){
                        if(data.status == 'success'){
                            $scope.currentUser = data.user;
                            $scope.msg = 'Welcome '+data.user.realname;
                            $scope.userId = data.user.id;
                            $scope.loggedIn = true;                                 
                        }
                }).then(function () {
                    return $timeout(function () {
                            $state.go(
                                'dashboard', 
                                {},
                                {reload: true}
                            );
                 }, 250);
            });
        };  

Изначально у меня все это было в контроллере, затем я разделил его на службу и контроллер. Я пробовал применить $ scope. $, Но получаю ошибку inprog. Как мне обновить модель без перезагрузки?


person aooawnewkn    schedule 29.09.2014    source источник


Ответы (1)


Ваш контроллер и переменные в нем будут обслуживаться из кеша.

Есть несколько способов решить эту проблему. Сначала отключите кеширование в определении состояния ...

$stateProvider.
  state('dashboard', {
    url: '/dashboard',
    cache: false,

... но у меня были ситуации, когда это не работало. Вы также можете установить триггер на изменение состояния (либо $ stateChangeStart на контроллере входа в систему, либо $ stateChangeSuccess на контроллере приборной панели):

$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
// reload stuff
});

Вы также можете установить эти триггеры в $ rootScope, если хотите, чтобы они срабатывали при изменении состояния всех ваших контроллеров.

person seven77    schedule 30.05.2015