对工厂资源的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');
}]);
为什么会这样?
答案 0 :(得分:0)
只有在您使用Angular的注射系统时,Angular的注射系统才有效。通过执行new Resource()
,您可以实例化一个简单的Javascript"类"你自己使用普通的Javascript;在这种情况下,$inject
上的Resource
属性并没有神奇地做任何事情。
您对module(..).factory('Resource', ..)
所做的是将'Resource'
定义为可注射依赖项。您现在必须将其用作控制器的依赖项,Angular将使用其注入系统:
module(..).controller('MyController', ['Resource', function (Resource) {
Resource.get(...)
}]);