我正在开发一个角度应用程序,我正在使用一个服务,该服务应该在继续执行应用程序之前从服务器加载一些细节。
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"
});
这样的事情甚至可能吗?
答案 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