1

奇妙な行動のショー

これは、ログインボタンを押すたびに発生します。

最初のログイン: コールバックに 2 つのログインが表示される

最初のログアウト

2 回目のログイン: コールバックに 4 つのログインが表示される

2回目のログアウト

3 回目のログイン: コールバックで 5 回のログインが連続して表示されるようになりました

これは私のログイン機能です:

$scope.userLogin = function(user){
        $scope.userLoginEmail = user.email;
        $scope.userLoginPassword = user.password;

        $scope.authUser().login('password', {
            email: $scope.userLoginEmail,
            password: $scope.userLoginPassword
        });
        $scope.loginModalHide();
        user.email = '';
        user.password = '';
    };

私の質問は簡単です。なぜこうなった?ログアウトを押しても、ログインが自動的に呼び出されることがあります。

4

1 に答える 1

2

あなたを見るとAuthCtrl、AngularFireバインディングなしでFirebaseSimpleLoginを使用しているようです。$digestこの方法でループの問題が発生します。AngularFire を使用する利点の 1 つは、Nice with $digestloop を配置できるため、スコープの適用やタイムアウトの設定について心配する必要がないことです。

AngularFire は$firebaseSimpleLoginバインディングを提供します。ユーザーがログインおよびログアウトすると、 でイベントが発生し$rootScopeます。

app.controller('AuthCtrl', function($scope, $rootScope, $firebaseSimpleLogin) {
  var simpleLogin = $firebaseSimpleLogin(new Firebase('<your-firebase>'));

  $scope.user = {
    email: '',
    password: ''
  };

  $scope.login = function() {
    simpleLogin.$login('password', {
      email: user.email,
      password: user.password
    });
  };

  $rootScope.$on('$firebaseSimpleLogin:login', function(e, user) {
    // handler post login event
  });

  $rootScope.$on('$firebaseSimpleLogin:logout', function(e, user) {
    // handler post logout event
  });

});

$firebaseSimpleLogin通常、バインディングはファクトリ内にカプセル化します。ここで Plunker のデモ例を確認できます。

プランカーデモ

于 2014-07-14T19:26:07.090 に答える