6

我有一个关于 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/$injector/unpr ? p0=%24service1

如果您删除 in 的依赖关系,$servic1它将$service2起作用,但为什么呢?

4

2 回答 2

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;
    }];
});
于 2013-10-23T15:53:13.400 回答
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

此外,我相信以 a 开头的服务名称$是为 AngularJS 及其扩展保留的。$对应用程序定义的服务使用开头不带 的名称。

于 2013-10-23T14:40:15.883 回答