我正在尝试在我的角度应用程序中编写一个小服务,这将使我能够选择在全局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;
}]);
Run Code Online (Sandbox Code Playgroud)
Mar*_*cok 31
在AngularJS中,resolve()的结果在$ digest周期内异步传播,而不是立即传播.这意味着只有在摘要周期发生时才会调用(稍后)调用then()注册的回调.
在您的代码中,没有任何东西导致Angular进入摘要周期,因此从不调用then()回调.调用$ apply()是导致摘要周期运行的一种方法.另一种方法:添加一个没有任何操作的ng-click按钮,然后单击它,它将导致一个摘要周期,你应该看到结果:
<button ng-click="">Force digest by clicking me</button>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13507 次 |
| 最近记录: |