Частный член Angular Module

В 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'])

    
        
                 {{child}}
        
    

    
        
                 {{child}}
        
    

Ответы на вопрос(2)

Для истинного поведения частного декоратора, @ pkozlowski.opensource имеет правильный ответнет, Тем не менее, вы могли бы несколько смоделировать это поведение.

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

Пример:

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" модуль.

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

Решение Вопроса

нет, не возможно создатьчастный" Услуги в текущей версии AngularJS. Были некоторые дискуссии о поддержке частных (модульных) сервисов, но она не реализована.

На сегодняшний день все сервисы, предоставляемые в данном модуле, видны всем остальным модулям.

 daniel142603 сент. 2014 г., 19:07
Вот'это иллюстрация, иллюстрирующая это: jsfiddle.net/6uux843h/1

Ваш ответ на вопрос