我没有看到直接注入我的依赖关系与在angularjs中使用$ injector的区别(或优点/缺点)。我为什么要做其中一个?以下是两者的样本。
angular
.module("myApp")
.factory("myService", [
"$injector", function($injector) {
var $http = $injector.get("$http");
//used $injector to get $http, now get some data, etc.
}
]);
angular
.module("myApp")
.factory("myService", [
"$http", function($http) {
//just use $http to get some data, etc.
}
]);
答案 0 :(得分:0)
两种解决方案都有效,但不同之处在于代码的可读性和可扩展性。
使用第二种解决方案,您可以按工厂定义查看所有模块的依赖项。
angular
.module("myApp")
.factory("myService", [
"$myService", function($myService) {
}
]);
如果您注入一个完整的$ injector,您的依赖项将被修复。您将无法使用一致的API注入其他服务。
angular
.module("myApp")
.factory("myService", [
"$injector", function($injector) {
var $myService = $injector.get("myService");
}
]);
总而言之,两种解决方案都有效,但使用的是第一种可能性。
答案 1 :(得分:0)
它还使单元测试更容易使用第一个示例。您只需模拟注入,并为您处理您的依赖项。对于第二个例子,有很多方法可以绕过它,但是你只是让你的生活变得更加困难。
答案 2 :(得分:0)
在大多数情况下,第二种方法很简单,可读并且只是起作用,特别是如果你使用为你编写字符串值的预编译器,例如ng-annotate:
angular.module("myApp")
.factory("myService", /*@ngInject*/ function($http, $locale, $window) {
});
我认为没有理由你应该避免它。
使用$injector
的第一种方法应保留用于特定情况,例如当注射太多(你现在不想重构)或在某些特定情况下进行测试时。