为独立功能而不是服务/控制器注入依赖项的首选方法是什么?
有两种情况。第一个是
$httpProvider.interceptors.push(function(/* ... */));
我是否正确,在这种情况下我可以将数组传递给push
函数?
$httpProvider.interceptors.push(['$q', '$location', function($q, $location) { /* ... */ }]);
从文档中我并不清楚。
第二种情况是
$routeProvider
.when('/', {
templateUrl: 'main.html',
controller: 'MainCtrl',
resolve: {
loggedin: checkLoggedin
}
});
我可以将数组作为checkLoggedin
传递吗?
var checkLoggedin = ['$q', '$timeout', '$http', '$location', '$rootScope', function($q, $timeout, $http, $location, $rootScope) { /* ... */ }];
Docs说我们必须传递函数作为resolve
地图值,但该代码按预期工作。
答案 0 :(得分:1)
所以你完全正确地注射独立功能。如果我得到了这个问题,你会问为什么这样做有效,如果你传递的是不同类型而不是预期。期待一个函数,但是你要放一个数组。
我假设发生这种情况是因为名为injector
的角度机制提供了您在应用程序中使用的所有实体实例,并且它将遍历所有将要注入的内容,并将已识别的依赖项转换为其实例。因此,如果它将在函数['$q', '$timeout', '$httpHey', function($q, $timeout, $httpHey) { /* ... */ }];
中看到这样的三个参数,它将在应用程序初始化之前返回错误,因为注入器无法找到可用于创建此类服务实例的注册服务。但是如果所有数组项都被识别,它将创建新的实例,如果没有人存在并将它们作为参数传递给函数,否则它将采用它们已经存在的实例(因为服务是单例)。
它是一种低角度的角度,所以如果你需要更多的扩展响应,请留下评论。