angularjs工厂内部功能不是工厂所依赖的?

时间:2016-12-03 12:27:53

标签: javascript angularjs class factory protected

我正在尝试在我的模块中使用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似乎(至少在模块范围内)是全局的,并被第二个定义覆盖即使在不同的工厂,同名也是如此。

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

2 个答案:

答案 0 :(得分:0)

  

但似乎_addList似乎是(至少在模块范围内)全局并被第二个定义覆盖

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

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);
        }
    }
})