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
中使用它?
答案 0 :(得分:2)
致电订单:
app.config()
app.run()
app.controller()
运行块 - 在创建注入器后执行并用于启动注入 应用。只有实例和常量才能注入运行块。这是为了防止 应用程序运行时进一步的系统配置。
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
等。