AngularJS推迟范围内的特定行为
假设我们有一个这样的一些HTML:AngularJS推迟范围内的特定行为
<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
解决了我的问题。
回答:
在AngularJS中,承诺结果是在$ digest循环内异步传播的。因此,then()的结果不会传播到下一个摘要循环,如果没有$timeout
或$http
或$apply
触发一个循环,那么这个循环将永远不会发生。
另请参见Promise callback not called in Angular JS
以上是 AngularJS推迟范围内的特定行为 的全部内容, 来源链接: utcz.com/qa/261921.html