AngularJS $ location.path(url)不重定向

时间:2014-05-21 00:52:26

标签: javascript angularjs cordova location

所有

我正在使用AngularJS PhoneGap应用程序。我遇到了一个在收到API调用响应后立即发生的重定向。我的代码位于gist.github.com

我的问题是在controllers.js的第300行,我在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));
        });

如果有人能帮助我,我会很感激!

谢谢, 布鲁斯

3 个答案:

答案 0 :(得分:7)

尝试$ rootScope。$ apply();在$ location.path()

之后

OR

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

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

答案 1 :(得分:1)

您的then处理程序需要返回一些内容,以便在下一个条件下解除承诺。

只需在return response处理程序的末尾添加then

答案 2 :(得分:0)

看来这个问题实际上是在我的app.js运行函数调用中。在位置更改时,它会查看全局变量以查看是否已设置用户名,如果没有,则会拦截将客户端发送到登录页面的调用。一旦我在OnLocationChange处理程序中移动我的代码以查看那里的变量,它就会正确地重定向。

谢谢, 乙