如何为独立函数注入依赖项

时间:2016-09-17 06:20:13

标签: javascript angularjs

为独立功能而不是服务/控制器注入依赖项的首选方法是什么?

有两种情况。第一个是

$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地图值,但该代码按预期工作。

1 个答案:

答案 0 :(得分:1)

所以你完全正确地注射独立功能。如果我得到了这个问题,你会问为什么这样做有效,如果你传递的是不同类型而不是预期。期待一个函数,但是你要放一个数组。 我假设发生这种情况是因为名为injector的角度机制提供了您在应用程序中使用的所有实体实例,并且它将遍历所有将要注入的内容,并将已识别的依赖项转换为其实例。因此,如果它将在函数['$q', '$timeout', '$httpHey', function($q, $timeout, $httpHey) { /* ... */ }];中看到这样的三个参数,它将在应用程序初始化之前返回错误,因为注入器无法找到可用于创建此类服务实例的注册服务。但是如果所有数组项都被识别,它将创建新的实例,如果没有人存在并将它们作为参数传递给函数,否则它将采用它们已经存在的实例(因为服务是单例)。

它是一种低角度的角度,所以如果你需要更多的扩展响应,请留下评论。