7

AngularJS では、定義されているモジュール内で使用できるプライベート コントローラーまたはサービスを作成できますが、それらが注入される別のモジュールでは使用できません。

たとえば、PrivateController を Child モジュールに対してプライベートにすることができます。

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>
4

2 に答える 2

6

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

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

于 2013-06-06T05:50:51.003 に答える
2

真のプライベート デコレーターの動作については、 @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"

この例は、コントローラーに拡張する必要があります。

于 2016-05-10T07:40:28.520 に答える