在`run`方法中注入`service`

时间:2015-05-26 17:55:11

标签: javascript angularjs

angular.run方法的用例是什么?我有一个heavy服务消费resources并需要一段时间才能创建,然后再将其用于view

angular.module('myApp').service('heavyService',function($timeout){ 
       this.someAjaxCall=function(){

       } 
});

angular.module('myApp').run(function(heavyService){
      // How can i use my heavyService here and later use in app
});

如何在service方法中注入run,然后在application中使用它?

3 个答案:

答案 0 :(得分:2)

致电订单:

  1. app.config()
  2. app.run()
  3. 指令的编译功能(如果它们在dom中找到)
  4. app.controller()
  5. 指令的链接功能(如果找到)
  6.   

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

    source

    angular.module('myApp').run(['heavyService', function(heavyService) {
    
    }]);
    

答案 1 :(得分:2)

这样的事情怎么样? (根据John Papa's style guide "Route Resolve Promises"):

// route-config.js
angular
    .module('app')
    .config(config);

function config($routeProvider) {
    $routeProvider
        .when('/avengers', {
            templateUrl: 'avengers.html',
            controller: 'Avengers',
            controllerAs: 'vm',
            resolve: {
                moviesPrepService: moviesPrepService
            }
        });
}

function moviesPrepService(movieService) {
    return movieService.getMovies();
}

// avengers.js
angular
    .module('app')
    .controller('Avengers', Avengers);

Avengers.$inject = ['moviesPrepService'];
function Avengers(moviesPrepService) {
      var vm = this;
      vm.movies = moviesPrepService.movies;
}

基本上它是什么使它准备服务并在路由解析之前获取所有AJAX数据,一旦完成,你就可以访问控制器中的静态数据。

答案 2 :(得分:1)

运行块用于初始化我们希望通过应用程序提供的值。通过在运行中注入服务只会设置服务变量的值。每当任何其他组件要求服务时,都会获得这些初始值(因为服务本质上是单例)。

<强>代码

//it acts as initialization block
angular.module('myApp').run(function(heavyService){
     //here you can access service variables and method
     //this variable value has been set before asked from any controller
     heavyService.someVariable = 'Init Value'; 
});

在配置阶段,你也可以设置应该初始化的变量值(比如做一些配置设置),但实际的是配置块无法访问服务,他们只能访问{ {1}}当您处于provider阶段时,$rootScope也不可用。

优于内部化运行块内的值的优势在于它们可以访问运行config&amp;您也可以处理路线相关的事件,如$rootScope$locationchangestart$locationchangesuccess等。