Angular在module.run中等待promise

时间:2015-04-09 06:27:29

标签: javascript angularjs web typescript

我正在开发一个角度应用程序,我正在使用一个服务,该服务应该在继续执行应用程序之前从服务器加载一些细节。

application.run(($myService)=>{
    myService.loadSomething() //The application should pause until the execution  of the Service
                              //is completed until this the browser shoudl stay in a "loading state"
});

这样的事情甚至可能吗?

3 个答案:

答案 0 :(得分:6)

不在.run - .run功能不会“阻止”。通常,可以使用ngRoute / ui-router并使用resolve属性。

如果你不想走这条路,你可以创建一个应用级控制器并在那里“解决”:

.controller("AppCtrl", function($scope, loaderSvc){
   $scope.load = false;
   loaderSvc.preload().then(function(){
      $scope.load = true;
   });
});

并在视图中:

<div ng-controller="AppCtrl">
  <div ng-if="::load" ng-include="'main.html'">
</div>

答案 1 :(得分:4)

让自己熟悉$q并尝试规划应用程序,因为它不能等待任何事情发生。异步是每个AngularJS应用程序的关键。

如果您使用的是路由器,请熟悉resolve,这也可能有助于您等待&#34;在显示路线/视图之前的数据。

答案 2 :(得分:3)

我有类似的要求,最后我使用了@philippd的angular-deferred-bootstrap

有关详细问题和发人深思的讨论,请查看AngularJS : Initialize service with asynchronous data