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

の依存関係を削除すると機能$servic1$service2ますが、なぜですか?

4

2 に答える 2

1

はそのproviderような依存関係を注入できないようです。$service2ファクトリを使用して書き直すと、次のように機能します。

myApp.factory('$service2', ['$service1', function($service1) {
  var that = {};
  that.test = function() {
    $service1.test();
    console.log('service2');  
  };
  return that;
}]);

このプランカーを参照してください: http://plnkr.co/edit/JXViJq?p=preview

また、a で始まるサービス名は$、AngularJS とその拡張機能用に予約されていると思います。$アプリケーションで定義されたサービスには、先頭に がない名前を使用してください。

于 2013-10-23T14:40:15.883 に答える