2016-12-03 129 views
1

我想有2个班(厂区)在我的模块angularjs工厂的内部函数不是工厂的依赖?

angular.module('starter.services', []) 

.factory("TPreferences",function($cordovaSQLite){ 
    _set = function(pName, pValue){ 
      console.log("Setting: "+pName+":"+pValue); 
      } 

    _addList = function(pList){ 
       for(var p=0; p < pList.length; p++) 
       { 
        _set(pList[p].name, pList[p].value); 
       } 
      } 


    return { 
     init: function(){ 
         _addList(gSettings); 
     } 
    } 
}) 

.factory("TDayList",function($cordovaSQLite){ 
    _add = function(pName, pValue){ 
      console.log("Day: "+pName+":"+pValue); 
      } 

    _addList = function(pList){ 
     for(var p=0; p < pList.length; p++) 
     { 
      _add(pList[p].name,pList[p].value); 
     } 
    } 

    return { 
     init: function(){ 
         _addList(gExampleDays); 
        } 
    }; 

}); 

问题:当调用TPreferences.init(), “日:......” 被记录。 我假设“.factory(...)” - 东西是一个类,其中_addList是一个受保护的函数,但似乎_addList似乎是(至少模块范围)全局,并被第二个定义覆盖即使在不同的工厂也有相同的名称。

问题:当然,我可以在这个例子中简单地改变一个函数的名字,但我更喜欢像类一样处理工厂,这样我就可以使用两次内部函数的名字。那么,最聪明的方法是什么?

回答

0

但似乎_addList似乎是(至少模块宽)是全球性的第二定义

当然它的全球覆盖,因为你宣布在全球范围的。没有声明的初始化成为全局变量。所以永远不要忘记正确(constletvar)声明的变量:

const _addList = function(pList) { 
    for (var p=0; p < pList.length; p++) { 
    _set(pList[p].name, pList[p].value); 
    } 
} 
+0

它是那么容易:)感谢很多 –

0

你是不是在你的工厂,这使得这些功能使用全球var。无论是使用VAR或者如果你可以使用ES6,使用let关键字:

.factory("TPreferences",function($cordovaSQLite){ 
    var _set = function(pName, pValue){ 
     console.log("Setting: "+pName+":"+pValue); 
     } 

    var _addList = function(pList){ 
      for(var p=0; p < pList.length; p++) 
      { 
       _set(pList[p].name, pList[p].value); 
      } 
     } 


    return { 
     init: function(){ 
        _addList(gSettings); 
     } 
    } 
}) 
+0

它是那么容易:)非常感谢 –