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

回到顶部