2014-09-03 74 views
0

我有许多在AngularJs应用程序中定义的服务。有一个必须加载的根服务,从服务器获取一些数据,然后依赖此根服务的其他服务可以初始化,之后控制器可以加载和显示页面上的数据。如何在AngularJs中加载控制器之前等待服务初始化?

钍的问题是控制器的根服务之前加载,和儿童服务,完全可以初始化,如:

  • 用户加载页面
    • 根服务启动初始化
    • 控制器的负荷,这取决于关于子服务(取决于根服务)
    • 页面绑定失败,因为子服务无法向控制器提供数据
    • r OOT服务完成intialisation(太迟)

初始化流程我想是这样的:

  • 用户加载页面
    • 根业务启动初始化
    • 根服务完成intialisation
    • 依赖根服务初始化的子服务
    • 控制器的负荷,这取决于儿童服务
    • 页面绑定成功

是否有处理这种问题的技术?

+0

但是,一旦服务完成,您的控制器型号应该没问题,您可以将值重新分配给控制器范围,是吗? – Ahmad 2014-09-03 11:28:01

+1

也许这会帮助你http:// stackoverflow。com/questions/16286605/initialize-angularjs-service-with-asynchronous-data加载一些异步数据,你必须使用promise或回调函数 – falloff 2014-09-03 12:03:03

回答

0

从角文档https://docs.angularjs.org/guide/module

模块是配置的集合和运行其中获得在引导过程中施加到该应用程序块。在其最简单的形式中,模块由两种块的集合组成:

配置块 - 在提供程序注册和配置阶段执行。只有提供者和常量可以注入到配置块中。这是为了防止服务在完全配置之前发生意外实例化。

运行阻止 - 在创建注入器后执行并用于启动应用程序。只有实例和常量可以注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。

angular.module('myModule', []). 
    config(function(injectables) { // provider-injector 
    // This is an example of config block. 
    // You can have as many of these as you want. 
    // You can only inject Providers (not instances) 
    // into config blocks. 
    }). 
    run(function(injectables) { // instance-injector 
    // This is an example of a run block. 
    // You can have as many of these as you want. 
    // You can only inject instances (not Providers) 
    // into run blocks 
    }); 

试试这个。

相关问题