9

我有一些正在后台异步处理的数据,并希望延迟整个 AngularJS 应用程序的初始化,直到完成。

BackgroundData.initialized 是一个 Q 承诺,所以是这样的:

BackgroundData.initialized.then(AngularDoYoStuff)

我遇到的问题是主页的控制器启动它的初始化过程,点击 BackgroundData 并且它有错误/没有数据。

我可以在什么函数中包装 Angular 的初始化,而不是仅仅等待 dom-ready,它同时等待 dom-ready 和 BackgroundData.initialization?

更新

我已经更接近了有关手动引导的文档:

angular.element(document).ready ->
  setupGA()
  window.BackgroundData = new DataMachine()
  BackgroundData.initialized.then ->
    angular.bootstrap(document)

但是当控制器文件加载时(在这个文件之后),它们仍然在定义 BackgroundData 之前被初始化

更新 2

删除ng-appHTML 中的指令似乎已经解决了问题(因为那是告诉 Angular 自动初始化)但现在它只是忽略了我所有的angular.module调用

4

3 回答 3

9

问题是我将ng-app指令留在了 html 标记中,它告诉 Angular 自动初始化该范围。删除它可以让我的手动初始化正确运行。

于 2013-03-12T18:15:57.083 回答
3

正如克里斯提到的,它可以用 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>
于 2015-08-18T15:15:24.533 回答
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

于 2013-03-12T20:19:01.050 回答