2014-09-29 140 views
1

我已經構建了一些登錄,並希望用戶在成功登錄後被踢到儀表板頁面。截至目前,除非在我重新加載儀表板頁面之前模型不更新,否則一切都按預期工作。

我寫了一個服務來處理$ 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。$ apply,但是我得到一個inprog錯誤。我如何在不重新加載的情況下更新模型?

回答

0

您的控制器及其中的變量將從緩存中提供。

有幾種方法可以解決這個問題。首先是狀態定義中的禁用緩存...

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

...但我遇到過這種情況無效。您還可以設置一個觸發的狀態變化($ stateChangeStart儀表盤控制器上的登錄控制器或$ stateChangeSuccess上):

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

您還可以,如果你希望他們放火的$ rootScope這些觸發器通過你所有的控制器改變狀態。

相關問題