2014-05-21 67 views
2

所有,

我有一個AngularJS PhoneGap的應用我的工作。我被困在接收到API調用響應後立即發生的一個重定向。我的代碼位於gist.github.com

我的問題是在第300行的controllers.js,我打電話給我的重定向在一個then()塊。

UserService.login($scope.user.email, $scope.user.password) 
      .then(function(response) { 

       globals.session_id = response.data.meta.session_id; 
       globals.logged_in_userId = response.data.response.users[0].id; 

       if ($scope.user.remember === true) { 
        window.localStorage.setItem("_session_id", response.data.meta.session_id); 
        window.localStorage.setItem("logged_in_userId", response.data.response.users[0].id); 
       } else { 
        window.localStorage.removeItem("_session_id"); 
        window.localStorage.removeItem("logged_in_userId"); 
       } 
      }) 
      .then(function() { 
       $location.path("/tab/locations");// <=== This line doesn't cause an error but does not result in a redirect 
      }) 
      . 
     catch (function(response) { 
      alert(JSON.stringify(response)); 
     }); 

如果有人可以請幫助我,我會很感激!

感謝, 布魯斯

+0

使用rootScope到目前爲止,我已經試過申請,適用範圍,並使用與範圍的手錶沿承諾回報中的變量,並且在任何時候做重定向工作。我也嘗試使用window.navigation.href,我什麼都沒有。 必須有成功登錄後重定向用戶的方法。 – jaxmeier

回答

0

它出現的問題實際上是在我app.js運行函數調用。在位置更改時,它查看全局變量以查看用戶名是否已設置,如果不是,則攔截將客戶端發送到登錄頁面的呼叫。一旦我將我的代碼移到OnLocationChange處理程序中去查看那裏的變量,它就會正確地重定向。

感謝, 乙

1

then處理程序需要返回的東西,這樣的承諾將會停息,決心在未來條件。

只需在您的then處理程序末尾添加return response即可。

+0

Hi Alp, 感謝您的回覆。我只是試過,但仍然沒有重定向。 – jaxmeier

+0

如果使用'window.location.href =「/ tab/locations」',它會起作用嗎? – Alp

7

嘗試$ rootScope。$ apply(); $ location.path()後

OR

$scope.$apply(function() { 
    $location.path("/tab/locations"); 
}); 

您還可以使用$ location.url()

+0

嗨阿布舍克 感謝您的回覆。不幸的是,我已經嘗試了兩種方法,沒有運氣 – jaxmeier

+1

這對我有效。謝謝! –

+0

爲我工作。謝謝! –