1

Kinvey HTML5 ライブラリを使用して、ログインに Google ID を使用するクライアント側アプリを構築しようとしています。Oauth トランザクションに関する限り、すべて問題ないように見えますが、スコープ パラメーターを使用してログイン ボタンの表示を切り替えようとしており、Kinveyconnectメソッドへのコールバック内で、Angular が変更を検出していないようです。 .

サービス:

  connect: function(successFn, failureFn) {
    return Kinvey.Social.connect(null, 'google',
      {
        success: successFn,
        failure: failureFn
      });
  }

ログインリンクのディレクティブ:

    $scope.login = function() {
      Login
        .connect(function(response) {
          $scope.loggedIn = true;
        },
        function(response) {
        });
    }

ディレクティブ テンプレート:

<div>
  <button ng-hide="loggedIn" type="button" class="btn" ng-click="login()">Login with Google ({{loggedIn}})</button>
  <div class="btn-group btn-small" ng-show="loggedIn">
    <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
      Hello, {{user.socialData.name}} <span class="caret"></span>
    </a>
    <ul class="dropdown-menu">
      <li><a href="/profile">My Profile</a></li>
      <li><a href="/performance">My Performance</a></li>
      <li class="divider"></li>
      <li><a href="/logout" ng-click="logout()">Log Out</a></li>
    </ul>
 </div>
</div>

目標は、ログイン ボタンの表示とドロップダウンの表示を切り替えることです。私がやっていることがうまくいかない理由はわかりません。を使用$timeoutして値の変更をシミュレートしてもloggedIn、正しい動作が生成されます。

4

1 に答える 1

1

Kinvey.Social$digest サイクルをトリガーできるように、外部サービスが戻ったときに Angular に通知する必要があります。$apply()これは、の関数で行うことができます$scope

$scope.login = function() {
  Login
    .connect(function(response) {
      $scope.$apply(function() { $scope.loggedIn = true; });
    },
    function(response) {
    });
}

angular独自の$httpサービスを使用する場合、これは処理されますが、外部のものを使用する場合、これは、Angularが使用しているng-showディレクティブをトリガーするダーティチェックサイクルを実行することを知っている方法です.

于 2013-08-02T01:02:54.997 に答える