2015-12-10 71 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