2015-12-10 2 views
0

У меня есть Угловая фабрика, которую я использую для шаблона показательного модуля, чтобы открыть интерфейс службы. На заводе использовались другие вложенные зависимости для поддержки государственной службы, которые не включены в саму общественную службу. Я понимаю, почему приведенный ниже код сломан, но то, о чем я спрашиваю, есть, если есть стандартный шаг, чтобы выполнить это? Мне не удастся выяснить правильную модель, чтобы дать мне доступ к частным членам/функциям при вызове публичной службы. Любые указатели оцениваются. В приведенном ниже коде, если контроллер вызывает myfactory.initData();, частные функции и вары недоступны.Угловой доступ к частным частным лицам

(function() { 
    'use strict'; 

    angular.module('app').factory('myFactory', ['common', 'config', myFactory]); 

    function myFactory(common, config) {  
     var data = { cogs: [], widgets: [] }; 
     var dep = config.dependency; 

     // Return this factory service definition 
     var service = { 
      data: data,    
      initData: initData, 
      reset: reset    
     }; 
     return service; 

     function initData(forceRefresh) { 
      _private1(); // out of scope, not part of returned service 
      _private2(); // out of scope, not part of returned service 
     }   

     function _private1() { 
      // get cogs, from non-exposed private 
      dep.f1(); 
     } 

     function _private1() { 
      // get cogs, from non-exposed private 
      dep.f2(); 
     } 
    } 
})(); 
+0

Они частные по причине , Вы должны быть в состоянии проверить его из открытого интерфейса. Нет доступа к этим частным лицам. –

+0

Я не понимаю, почему он сломан? Если вам нужен доступ к этим функциям, не делайте их закрытыми. – MinusFour

+0

Я согласен с Хуаном и Минусом ... Это не сломлен, как указано, и они неправы по какой-то причине. Причина в том, что я не хочу раскрывать внутреннюю часть сервиса потребителям этой услуги, но мне может потребоваться повторное использование логинов с помощью службы, которую может вызывать публичный API. – pseabury

ответ

1

Вы не можете получить доступ к частным функциям, потому что у вас нет каких-либо ссылок на них в рамках - сохранить их в переменную, чтобы держать их в рамки:

(function() { 
    'use strict'; 

    angular.module('app').factory('myFactory', ['common', 'config', myFactory]); 

    function myFactory(common, config) {  
     var data = { cogs: [], widgets: [] }; 
     var dep = config.dependency; 

     var _private1 = function() { 
      // get cogs, from non-exposed private 
      dep.f1(); 
     } 

     var _private1 = function() { 
      // get cogs, from non-exposed private 
      dep.f2(); 
     } 

     // Return this factory service definition 
     var service = { 
      data: data,    
      initData: initData, 
      reset: reset    
     }; 
     return service; 

     function initData(forceRefresh) { 
      _private1(); // out of scope, not part of returned service 
      _private2(); // out of scope, not part of returned service 
     } 
    } 
})(); 
+0

Спасибо @ lightswitch05, я изучил еще и поиграл, пока я так не хотел, спасибо за вашу помощь. Очень признателен! [Вот скрипка] (http://jsfiddle.net/pseabury/f3w1Lqeu/) – pseabury

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