2013-06-05 11 views
6

AngularJSでは、定義されているモジュールで使用できるプライベートコントローラまたはサービスを作成できますが、注入された別のモジュールでは使用できません。例えば、PrivateControllerは子供モジュールにプライベート行うことができAngular Module Private Members

angular.module('Child', []) 

    .controller('PublicController', function ($scope){ 
    $scope.children = ['Bob', 'Sue']; 

    }) 

    .controller('PrivateController',function ($scope){ 
    $scope.redHeadedStepChildren = ['Billy', 'Mildred']; 

    }) 

angular.module('Parent', ['Child']) 
<div ng-app="Parent"> 
    <div ng-controller='PublicController'> 
     <div ng-repeat='child in children'> 
       {{child}} 
     </div> 
    </div> 

    <div ng-controller='PrivateController'> 
     <div ng-repeat='child in redHeadedStepChildren'> 
       {{child}} 
     </div> 
    </div> 
</div> 

答えて

5

、AngularJSの現在のバージョンでは「プライベート」のサービスを作成することはできません。プライベート(モジュールスコープ)サービスのサポートについていくつかの議論がありましたが、実装されていません。

現在、特定のモジュールで公開されているすべてのサービスは、他のすべてのモジュールから参照できます。

+0

ここにこれを説明するためのフィドルがあります:jsfiddle.net/6uux843h/1 – daniel1426

0

真のプライベートデコレータの動作の場合、@ pkozlowski.opensourceはのNoの答えがです。ただし、この動作をいくらかシミュレートできます。

目的の動作に近づける1つの方法は、アプリケーションの他のすべての部分には不明なモジュールを作成することです。このモジュールには、非公開にするすべてのサービス/コントローラ/指令が含まれています。次に、他の開発者に公開するモジュールでは、「プライベート」モジュールを依存関係として使用できます。

例:

MyModule.jsもちろん

angular.module("my.module.private_members", []) 
.provider("PrivateService", function() { ... }); 

angular.module("my.module", ["my.module.private_members"]) 
.provider("PublicService", function($PrivateServiceProvider) { ... }); 

Main.js

angular.module("app", ["my.module"]) 

// The following line will work. 
.config(function($PublicServiceProvider) { ... }); 

// The following line causes an error 
.config(function($PrivateServiceProvider) { ... }); 

"app"モジュールの開発者は、その後"my.module.private_members"を含んに気付いた場合、これは動作しません。モジュールは、"app"モジュールの直接の依存関係として実装されています。

この例はコントローラにも適用されます。