0

次のような html があるとします。

<button
  id="my-login-button"
  ng-hide="loggedIn"
  ng-click="login()">Log me in!</button>

また、JavaScript があります。

// controller.js
$scope.login = function () {
    API.login()
      .then(function () {
        console.log('login promise resolved');
      });
};

// service.js
app.factory('API', ['$q', '$timeout', function ($q, $timeout) {
  return {
    login: function () {
      var login = $q.defer();

      // async login
      VK.Auth.login(
        function () {
          // login.resolve();       // doesn't work without $timeout()
          $timeout(login.resolve);  // works as it should
        },
        VK.access.FRIENDS | VK.access.AUDIO
      );

      return login.promise;
    }
  };
}]);

このコードは正常に動作しますが、謎の部分は$timeout()関数の近くにあります。なぜ解決をそれでラップする必要があるのですか? コードがないと期待どおりに機能しないのはなぜですか?

私はスコープ変数で何かをしません。ただ慰めているだけです。そしてそれなし$timeoutでは、次のダイジェストで呼び出されます...

私にとっては意味がありません。スコープの小道具を変更する必要がある場合は、すべてを でラップします$apply

いつもの先延ばしされた行動が不思議なものになった理由を誰か説明できますか?

PSこの質問の回答$timeoutを読んだ後、問題を解決しました。

4

1 に答える 1