在角度js控制器或服务中添加更多依赖项是否有任何害处

时间:2015-04-30 04:32:10

标签: javascript angularjs angularjs-scope

假设这是我的角度控制器

app.controller("MyCtrl", function($scope, $modal, $state,) {
});

我正在考虑让一个全局变量保存最常用的依赖项,如

var all = ['$scope', '$modal', '$state']

然后在每个地方使用all以及其他一些依赖项(如果需要)

是否存在将所有依赖项放在各处的性能问题

3 个答案:

答案 0 :(得分:2)

必须注入更多代码才会有性能损失,但不是主要代码。我不建议像这样全局定义依赖项,因为依赖项应该非常明显。你应该确切地知道你在做什么,而不必打开另一个文件并检查。

如果您需要在任何地方重用一组依赖项,那么这表明代码可能存在问题。为什么代码库的不同区域都会使用相同的东西?这表明存在重复问题。我不会将这个断言延伸到只需要一直注入$ scope或$ http。

简而言之,我认为管理这样的依赖关系并不是一个好主意。

答案 1 :(得分:0)

虽然我对Angular的内部知识并不深入了解,也没有为实际衡量你所要求的表现而烦恼,但我还是冒昧地猜测了......你不会在这里看到性能影响。唯一的影响是控制器实例化,每个视图只发生一次。即使在那时,我们只是谈论新的一些对象...性能影响应该是非常微不足道的,而不是我会担心的事情。

答案 2 :(得分:0)

您无法使用您在其他控制器或服务中定义的变量进行注入。您可以做的一件事是创建一个工厂并将您的依赖项放在$ rootScope中。

app.factory('root',function($rootScope, $modal, $state){
$rootScope.modal = $modal;
$rootScope.state = $state;
});

你只需将$ rootScope放在你的所有控制器中,你就可以访问你喜欢的任何内容。你只需要注入' root'在你的主控制器(如果你有)。看起来像鱼腥的建筑需要这个捷径,但这就是我要做的。真的没有穿孔 - 非基元是引用类型。