Pre*_*hev 3 javascript angularjs
在Angular中,从$ injector实例直接获取依赖项而不是参数是一种好的做法吗?
我有一个问题,我的控制器开始有很多依赖,所以而不是:
myApp.controller(['$scope', 'Dep1', 'Dep2', 'Dep3', function($scope, Dep1, Dep2, Dep3) {
...
}]);
Run Code Online (Sandbox Code Playgroud)
我会做:
myApp.controller(['$scope', '$injector', function($scope, $injector) {
var Dep1 = $injector.get('Dep1');
var Dep2 = $injector.get('Dep2');
var Dep3 = $injector.get('Dep3');
}]);
Run Code Online (Sandbox Code Playgroud)
我发现它的功能相同,但参数的混乱程度要小得多.我想这会让我的组件稍微不那么容易测试,对吧?
你怎么看?
根据我的意见,阅读以下帖子后:
为了最小化长依赖性列表,您的第二种方法被视为服务定位器反模式.请参阅 - 服务定位器AntiPattern
使用服务定位器反模式是不好的,因为它会使您作为维护开发人员的生活变得更糟,因为您将需要使用相当大的脑力来掌握您所做的每个更改的含义.使用$ injector会混淆资源的实际依赖关系(在本例中为控制器)并导致可维护性.
另外,根据angular的文档,最好的方法是:
使用内联数组注释(首选)
如果您的控制器最终使用了这么多依赖项,那么您可能做错了,也许您违反了单一责任原则.考虑:
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |