【发布时间】:2013-05-29 20:58:46
【问题描述】:
假设我们有一些这样的 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中。
谁能解释为什么通常的延迟行为变得神秘?
附:阅读this question answers 后,我已经解决了$timeout 的问题。
【问题讨论】:
标签: angularjs deferred angularjs-scope angularjs-service