2015-12-10 112 views
0

我有一個Angular工廠,我使用揭示模塊模式來公開服務接口。工廠使用其他注入依賴項來支持公共服務本身不包含的公共服務。我明白爲什麼下面的代碼被破壞了,但我要問的是,如果有一個標準模式來實現這個目標?我沒有很好的計算出正確的模式,以便在調用公共服務時訪問私有成員/函數。任何指針讚賞。在下面的代碼中,如果控制器調用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

我同意胡安和MinusFour ...它沒有違反規定,他們是私人的原因。原因是我不想將服務的內部結構公開給服務的消費者,但我可能需要使用公共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

Thanks @ lightswitch05,我研究了一些,並一直玩,直到我以我想要的方式感謝您的幫助。非常感激! [這是一個小提琴](http://jsfiddle.net/pseabury/f3w1Lqeu/) – pseabury