我使用ionic1并且我有多个控制器,每个控制器用于不同的页面。 考虑以下注射:
.controller('login', function($scope, $http, $location, $state,$rootScope , auth,$timeout)
.controller('Home', function($scope, $rootScope, $http, $state,$location, $ionicNavBarDelegate, $timeout, auth, getData)
所以我有大约10个。
大多数注射对所有控制器都是通用的,例如$scope,$rootScope
和其他控制器。
所以我想知道是否有一个单行程序可以一次性注入所有依赖项。
答案 0 :(得分:3)
您可以创建一个返回一些最常用依赖项的工厂。
这样的事情:
angular
.module('app')
.factory('common', common);
common.$inject = ['$rootScope', '$http', '$state'];
function common($rootScope, $http, $state) {
var service = {
$rootScope: $rootScope,
$http: $http,
$state: $state
};
return service;
}
然后您只需要在控制器中加入common
服务并使用它:common.$rootScope
。
希望这会有所帮助:)
修改强>
正如@estus在评论中所说的,$scope
会失败,因为$scope
是本地依赖,在服务/工厂中不可用。这应该不是问题,因为我建议尽可能避免使用$scope
(使用controllerAs语法)
答案 1 :(得分:1)
注入所有依赖项与依赖注入的概念相矛盾(除了控制器可以具有本地依赖性的事实)。依赖性是控制器依赖的原因。
如果有多个控制器具有匹配的依赖关系,则它们可以继承基本控制器。如果子控制器应该有自己的依赖关系,这可以通过自动为控制器实例分配依赖关系的基类来完成。控制器继承最适合ES6类:
class BaseController {
static get $inject() {
return ['$rootScope', '$scope', '$timeout'];
}
constructor(...deps) {
this.constructor.$inject.forEach((depName, i) => {
this[depName] = deps[i];
});
}
}
class SomeController extends BaseController {
static get $inject() {
return [...super.$inject, 'some'];
}
constructor(...deps) {
super(...deps);
...
}
}
app.controller('SomeController', SomeController);