如何延迟AngularJS应用程序初始化?(How to delay AngularJS App I

2019-08-17 12:21发布

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

BackgroundData.initialized是问答的承诺,所以是这样的:

BackgroundData.initialized.then(AngularDoYoStuff)

我遇到的问题是主页的控制器开始其初始化过程,打BackgroundData,要么有错误/无数据。

什么功能我包装角的初始化的话,而不是仅仅DOM就绪,等待了DOM准备和BackgroundData.initialization?

UPDATE

我已经得到了与文档更接近手动引导 :

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

但是,当控制器负载文件(该文件之后),他们仍然得到BackgroundData初始化之前被定义

更新2

卸下ng-app的HTML指令似乎已经解决了这一问题(因为这告诉角度来自动初始化),但现在它只是忽略所有的我angular.module电话

Answer 1:

问题是,我已经离开了ng-app HTML标记,以自动初始化范围告诉角度指令。 删除它让我手动初始化才能正确运行。



Answer 2:

克里斯提到,它可以与angular.bootstrap不提NG-应用程序来完成:

<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>


Answer 3:

如果你在你的应用程序中使用的路线接近这一点的一种方法是让应用程序初始化,但等待确定的路线,直到数据可用。

即提供一种用户友好的“装载”消息,然后经过加载功能。

你是能够注入$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



文章来源: How to delay AngularJS App Initialization?