2016-10-10 3 views
1

認証が成功した後、 './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

角度の外の世界(つまり、カスタムイベントauthenticateUserのonSuccessイベント)から$locationパスを変更しています。そのため、変更内容がURLにすぐに反映されていないのです。

外部からの角度バインディングを変更しても、ダイジェストサイクルで実行されない限り、ページ上の現在の変更は直接更新されません。これらの変更が行われるようにするには、ダイジェストサイクルを手動で呼び出して、Angular digestシステムにアプリケーションコンテキストでいくつかの変更が発生したことを伝える必要があります。同期させるためにダイジェストサイクルを開始する必要があるからです。キックオフダイジェストサイクルでは、$timeout(最も望ましい)/ $scope.$apply機能を使用できます。

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

above.try示すように、関数内で$場所を宣言する必要があります。出来た。あなたの説明をありがとう。 –

+0

@leocそれを知ってうれしいです、ありがとうございます)\ –

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

あなたはクールこの

+0

依存関係は 'controller'レベル関数に注入できます。 –

関連する問題