我正在尝试在我的模块中使用2个类(factorys)
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()时,会记录“Day:...”。 我假设“.factory(...)” - Stuff是一个类,其中_addList是一个受保护的函数,但似乎_addList似乎(至少在模块范围内)是全局的,并被第二个定义覆盖即使在不同的工厂,同名也是如此。
问题:当然,我可以在这个例子中简单地更改其中一个函数的名称,但我更喜欢像类一样处理工厂,这样我就可以使用内部的名字了功能两次。那么,最聪明的方法是什么?
答案 0 :(得分:0)
但似乎_addList似乎是(至少在模块范围内)全局并被第二个定义覆盖
当然它是全球性的,因为你在全球宣布它。没有声明的初始化成为全局变量。所以永远不要忘记正确声明变量(const
,let
,var
):
const _addList = function(pList) {
for (var p=0; p < pList.length; p++) {
_set(pList[p].name, pList[p].value);
}
}
答案 1 :(得分: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);
}
}
})