假设我们有一些像这样的 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
.
谁能解释为什么通常的延迟行为变得神秘?
$timeout
PS在阅读了这个问题的答案后,我已经解决了我的问题。