而不是像控制器那样指定控制器中的所有服务:
mainApp.controller('MultiController', ['$scope', '$attrs', '$branchesService', '$repositoriesService', function ($scope, $attrs, $branchesService, $repositoriesService) {
console.log('multiController instantiated');
var vm = this;
// private idu funkcija definition bez scope
vm.init = function(mod) {
vm.mod = mod;
if (mod == "branch") {
console.log('MultiController branchesService');
vm.service = $branchesService;
} else {
console.log('MultiController repoService');
vm.service = $repositoriesService;
}
vm.items = [];
vm.selectedItem = null;
vm.error = 'no Error at the moment...';
loadRemoteData();
console.log('multiController.init()');
}
vm.init($attrs.mod);
是否可以使用$ inject? 我正在使用$ attrs从html获取一个规范,我应该使用哪种服务。
答案 0 :(得分:3)
您可以在控制器中$injector
依赖,然后$injector.get
获取服务对象。
$injector
用于检索提供者定义的对象实例, 实例化类型,调用方法和加载模块。
基本上$injector.get
方法会搜索您在棱角分明context
&内部提供的服务名称。如果找到,则返回object
。
<强>代码强>
vm.init = function(mod) {
vm.mod = mod;
if (mod == "branch") {
console.log('MultiController branchesService');
vm.service = $injector.get('branchesService'); //you will have service instance here
} else {
console.log('MultiController repoService');
vm.service = $injector.get('repositoriesService'); //you will have service instance here
}
vm.items = [];
vm.selectedItem = null;
vm.error = 'no Error at the moment...';
loadRemoteData();
console.log('multiController.init()');
}
答案 1 :(得分:1)
是的,您可以注入$injector
,并按照以下方式使用它:
var brancesService = $injector.get('brancesService');