我有以下代码,目的是在成功验证后重定向到'./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行,但我的问题是页面没有任何反应,直到我点击页面上的内容(不需要是一个按钮)。这是正常的行为吗?
答案 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,如上所示。此