我有一些数据正在后台异步处理,并希望延迟整个AngularJS应用程序的初始化,直到完成为止。
BackgroundData.initialized是一个Q承诺,所以像这样:
BackgroundData.initialized.then(AngularDoYoStuff)
我遇到的问题是主页的控制器启动其初始化过程,命中BackgroundData并且它有错误/没有数据。
我可以用什么函数包装Angular的初始化,而不仅仅是dom-ready,它等待dom-ready和BackgroundData.initialization?
更新
我更接近manual bootstrapping上的文档:
angular.element(document).ready ->
setupGA()
window.BackgroundData = new DataMachine()
BackgroundData.initialized.then ->
angular.bootstrap(document)
但是当控制器文件加载时(在此文件之后),它们仍然在定义BackgroundData之前被初始化
更新2
删除HTML中的ng-app
指令似乎解决了问题(因为这会告诉Angular自动初始化),但现在它只是忽略了我的所有angular.module
次调用
答案 0 :(得分:9)
问题是我在html标记中留下了ng-app
指令,它告诉Angular自动初始化该范围。删除它允许我的手动初始化正确运行。
答案 1 :(得分:2)
正如Chris所说,可以使用angular.bootstrap来完成,而不是提及ng-app:
<div id="appArea" ng-controller="someCtrl">
{{name}}
</div>
<script>
angular.module('someApp', [])
.controller('someCtrl', function($scope) {
$scope.name = "test name";
})
setTimeout(function() {
angular.bootstrap(document, ['someApp']);
}, 2000);
</script>
答案 2 :(得分:0)
如果您在应用中使用路线,解决此问题的一种方法是让应用初始化,但等待定义路线,直到数据可用。
即。提供用户友好的“加载”消息,然后在之后加载功能。
您可以在必要时注入$route
,然后调用类似的内容:
$route.routes["/RouteName/:param"] = {templateUrl:"template.html", reloadOnSearch:true, controller:"ControllerName"};
之后,请致电$route.reload()
或$rootScope.apply()
进行刷新。
https://groups.google.com/forum/?fromgroups=#!msg/angular/AokZpUhZ6mw/x2kPIN2VAC0J
的更多信息