$ resource工厂中的角度依赖注入

时间:2016-10-11 08:11:21

标签: javascript angularjs dependency-injection

对工厂资源的DI存在疑问:

AFAIK下面的示例是在Angular1中注入依赖项的推荐方法:

angular.module('myApp').factory('Resource', Resource);

Resource.$inject = ['$resource', 'CONSTANTS'];

function Resource($resource, CONSTANTS) {
  return $resource(CONSTANTS.server_url + '/resource/:id');
}

但我在使用中遇到问题,结合我的控制器中的新关键字:

var resource = new Resource();

这会导致错误,表明CONSTANTS未定义。使用以下语法,它可以正常工作。

angular.module('myApp').factory('Resource', ['$resource', 'CONSTANTS', function($resource, CONSTANTS) {
  return $resource(CONSTANTS.server_url + '/resource/:id');
}]);

为什么会这样?

1 个答案:

答案 0 :(得分:0)

只有在您使用Angular的注射系统时,Angular的注射系统才有效。通过执行new Resource(),您可以实例化一个简单的Javascript"类"你自己使用普通的Javascript;在这种情况下,$inject上的Resource属性并没有神奇地做任何事情。

您对module(..).factory('Resource', ..)所做的是将'Resource'定义为可注射依赖项。您现在必须将其用作控制器的依赖项,Angular将使用其注入系统:

module(..).controller('MyController', ['Resource', function (Resource) {
    Resource.get(...)
}]);