次のような 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
を読んだ後、問題を解決しました。