我正在尝试在我的角度应用程序中编写一个小型服务,这将使我能够选择全局 Javascript 对象中指定的配置参数。我不想尝试访问全局配置对象,除非文档已准备好(因为我无法保证脚本元素在 HTML 中插入的顺序)。
但是,我不明白为什么我需要打电话给$apply
为了使该决议真正传播到then
打回来。
myModule.service('GlobalConfigService', ['$q', '$rootScope', function($q, $rootScope) {
var def = $q.defer();
$(document).ready(function() {
def.resolve(MyConfig.val);
$rootScope.$apply();
});
def.promise.then(function () {
console.log('I am called only when $apply() is called. Why?');
});
return def.promise;
}]);
在 AngularJS 中,resolve() 的结果是在 $digest 循环内异步传播的,而不是立即传播。这意味着使用 then() 注册的回调只会在摘要循环发生时(稍后)被调用。
在您的代码中,没有任何因素导致 Angular 进入摘要循环,因此永远不会调用 then() 回调。调用 $apply() 是导致摘要循环运行的一种方法。另一种方法:使用 ng-click 添加一个不执行任何操作的按钮,然后单击该按钮,它将导致摘要循环,您应该看到结果:
<button ng-click="">Force digest by clicking me</button>
也可以看看https://stackoverflow.com/a/14657974/215945 https://stackoverflow.com/a/14657974/215945
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)