我对Angular中的依赖注入有一个简单的问题。我创建自定义服务,以便在彼此之间使用它们。不幸的是,我收到错误的方式我尝试它。这是我的代码:
var myApp = angular.module('app', []);
myApp.service('$service1', ['$rootScope', function($rootScope) {
this.test = function() {
console.log('service1');
};
}]);
myApp.provider('$service2', ['$service1', function($service1) {
var service = 'service2';
this.registerService = function(mytext) {
service = mytext;
};
this.$get = function() {
var that = {};
that.test = function() {
console.log(service);
};
return that;
};
}]);
myApp.config(['$service2Provider', function($service2Provider) {
$service2Provider.registerService('changed service2');
}]);
myApp.controller('AppCtrl', ['$rootScope', '$service1', '$service2',
function($rootScope, $service1, $service2) {
$service1.test();
$service2.test();
}]);
错误:[$ injector:modulerr]由于以下原因无法实例化模块应用: [$ injector:unpr]未知提供者:$ service1 http://errors.angularjs.org/1.2.0-rc.2/ $注射器/ unpr?P0 =%24service1
如果删除$servic1
中$service2
的依赖关系,它会起作用,但为什么会这样?
答案 0 :(得分:2)
代码大多是正确的,除了你必须在$get
中注入服务依赖项,而不是在提供者构造函数中,如下所示:
myApp.provider('$service2', function() {
var service = 'service2';
this.registerService = function(mytext) {
service = mytext;
};
this.$get = ['$service1', function($service1) {
var that = {};
that.test = function() {
console.log(service);
};
return that;
}];
});
答案 1 :(得分:1)
provider
似乎无法注入这种依赖关系。如果您使用工厂重写$service2
,它可以工作:
myApp.factory('$service2', ['$service1', function($service1) {
var that = {};
that.test = function() {
$service1.test();
console.log('service2');
};
return that;
}]);
请参阅此plunker:http://plnkr.co/edit/JXViJq?p=preview
此外,我认为服务名称以$
开头为AngularJS及其扩展名保留。对于应用程序定义的服务,请在开头使用不带$
的名称。