AngularJS推迟范围内的特定行为
假设我们有一个这样的一些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。
任何人都可以解释为什么通常的延期行为变得神秘吗?
P.S.在阅读this question answers后,我用$timeout解决了我的问题。