为什么$ location.path在我点击屏幕

时间:2016-10-10 06:31:09

标签: angularjs amazon-cognito

我有以下代码,目的是在成功验证后重定向到'./mainlandingpage'。以下是控制器的代码:

    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (result) {
            // pass token to use for getting credentials later
            sessionStorage.Token = result.getIdToken().getJwtToken();
            $scope.messageText = globalData.LoggingIn;
            $location.path('/mainlandingpage');
            console.log(' after location');

        },

        onFailure: function(err) {
            alert(err);
        }

Firebug的控制台显示以下内容:

POST https://cognito-idp.ap-northeast-1.amazonaws.com/200 OK 704ms 
POST https://cognito-idp.ap-northeast-1.amazonaws.com/200 OK 401ms 
after location 

所以,我知道代码经过$ location.path行,但我的问题是页面没有任何反应,直到我点击页面上的内容(不需要是一个按钮)。这是正常的行为吗?

2 个答案:

答案 0 :(得分:2)

您正在修改来自Angular世界之外的$location路径(即自定义事件authenticateUser的onSuccess事件)。这就是为什么更改没有立即反映在URL中。

更改来自外部世界的角度绑定不会直接更新页面上的当前更改,除非它贯穿摘要周期。要进行这些更改,您必须手动调用摘要周期以告知Angular digest系统应用程序上下文中发生了一些更改。因为你必须启动摘要周期才能使它们同步。对于启动摘要周期,您可以使用$timeout(最首选)/ $scope.$apply功能。

//inject `$timeout` in controller function
$timeout(function(){
   $location.path('/mainlandingpage'); 
})

答案 1 :(得分:0)

cognitoUser.authenticateUser('authenticationDetails', function( $location) {
$location.path('/mainlandingpage');
       //your code here.......
});

您需要在函数中声明$ location,如上所示。此