2013-06-05 52 views
6

В AngularJS можно создать частные контроллеры или службы, которые могут использоваться в пределах модуля, в котором они определены, но не с помощью другого модуля, в который они вставляются.Угловой модуль Частные члены

Например, может PrivateController быть приватной для модуля ребенка:

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. Однако вы могли бы имитировать такое поведение.

Одним из способов приблизиться к желаемому поведению является создание модуля, который неизвестен всем остальным частям приложения, который содержит все службы/контроллеры/директивы, которые должны оставаться закрытыми. Тогда модуль, который вы будете подвергать другим разработчикам, может использовать «частный» модуль как зависимость.

Пример:

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".

Этот пример должен распространяться на контроллеры.

Смежные вопросы