如何在Angular的Run块中等待promise?

Mar*_*ijn 27 angularjs

我真的需要在bootstrapping angular之前加载一些数据.出于这个原因,我创建了一个run块/在这个run块中我调用了一个服务上的方法,该服务从服务器加载一些数据.由于这是一个异步调用,JavaScript会进一步执行,这会导致我的应用程序中出现一些未定义的对象.

我正在使用路线,但不能选择使用该resolve物业.

有人能提供一个关于如何等待承诺在run块中准备好的解决方案吗?

编辑:

感谢给定的答案,我通过手动引导角度来解决它:

$(document).ready(function () {
    $.ajax('/Data/GetDropdownData', {type:'POST'}).done(function (response) {
        app.run(['ListService',  function (ListService) {
            ListService.setData(response);
        }])

        angular.bootstrap(document, ["sma"]);
    })
})
Run Code Online (Sandbox Code Playgroud)

Sna*_*hot 5

您可能希望查看 SO问题 - 它显示了如何使用异步数据初始化AngularJS服务.

是一个来自该问题的plunkr示例,显示使用AngularJS服务(如$ http)来加载配置,然后进行进一步的初始化.

这个答案有一个很好的解释,并显示了一个等待DOM加载的例子(此答案的plunkr示例在这里):

angular.element(document).ready(function() {
  angular.bootstrap(document);
});
Run Code Online (Sandbox Code Playgroud)


Fed*_*kov 4

正如我评论的那样,将其放在这里

您可以尝试手动引导

<script> 
   angular.element(document).ready(function() {
      angular.bootstrap(document); 
   });
</script>
Run Code Online (Sandbox Code Playgroud)

当然,在这种情况下,您不能使用控制器和角度方式来获取数据。我认为你必须通过 jQuery 加载数据,在 jquery 回调中引导你的角度,然后使用从 jquery 获得的数据初始化你的作用域变量。