2017-09-09 14 views
0

私はWebプラットフォームでFirebaseを使用していますが、アクションが成功するたびにボタンとショーをクリックして新しいユーザーを認証し、ブートストラップアラート(ng-show)ない。ng-showがFirebase認証レスポンスで動作していません

何らかの理由でアラートが最初のクリックで表示されず、ボタンの2回目のクリックで表示されます。

アクションが成功するかどうかにかかわらずFirebaseがhttp POST要求を出すのはわかりませんが、このアクションによってng-showが表示されないことがあります。ところで、私は$httpでPOSTリクエストをいくつかのURLに試みましたが、警告が表示されるので、Firebaseとおそらく関係しています。アクションが成功したとき

例えばこれは、POSTリクエストは次のとおりです。 はXHR finished loading: POST "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=AIzaSyDq8jT_hORoFwefcApBXgiOAYQufpOvI9A".

それは非常に奇妙な問題だと私はそれを修正するために何ができるかわかりません。 私はそれがAngularのバグかもしれないと思っていました。私は1.3から1.6への角度のバージョンを切り替えようとしましたが、何も変わっていません。これは何とか助けることができるならば、ここ

は私のコードからいくつかの部品です:

myApp.controller('secondController', ['$scope', function($scope){ 

$scope.register = function(){ 

    firebase.auth().createUserWithEmailAndPassword('[email protected]','123321').then((user) => { 

     console.log(user); 
     $scope.alertShow = true; // not shown on first click 
     $scope.errorMessage = user.email; 
     console.log($scope.errorMessage); 

    }).catch(function(error) { 
     console.log(error.message); 
     $scope.alertShow = true; 
     $scope.errorMessage = error.message; 
     console.log($scope.errorMessage); 
    }) 

} 

}]); 

HTML:

<button class="btn btn-primary" ng-click="register()">Register</button> 

    <div class="alert alert-danger" role="alert" ng-show="alertShow"> 
     {{ errorMessage }} 
    </div> 

答えて

1

ng-if代わりのng-showを試してみてください。 ng - 動的にDOM要素を追加したり削除したりすると、ダイジェストサイクルが停止します。

<button class="btn btn-primary" ng-click="register()">Register</button> 

     <div class="alert alert-danger" role="alert" ng-if="alertShow"> 
      {{ errorMessage }} 
     </div> 

作品ではないとしてもNG-場合であれば、$digestサイクルをトリガする$applyを試してみてください。

myApp.controller('secondController', ['$scope','$timeout' function($scope,$timeout){ 

$scope.register = function(){ 
firebase.auth().createUserWithEmailAndPassword('[email protected]','123321').then((user) => { 

     console.log(user); 
     $scope.alertShow = true; // not shown on first click 
     $timeout(function(){$scope.$apply()},0); 
     $scope.errorMessage = user.email; 
     console.log($scope.errorMessage); 

    }).catch(function(error) { 
     console.log(error.message); 
     $scope.alertShow = true; 
     $timeout(function(){$scope.$apply()},0); 
     $scope.errorMessage = error.message; 
     console.log($scope.errorMessage); 
    }) 

} 

}]); 
+1

ng-ifでは動作しませんでしたが、$ applyで動作します。ありがとうございました! – zb22

関連する問題