2016-12-03 1 views
1

Ich versuche, zwei Klassen zu haben (factorys) in meinem Modulangularjs werksinterne Funktionen nicht fabrikabhängig?

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

}); 

Problem: Wenn TPreferences.init() aufgerufen wird, "Tag: ..." angemeldet ist. Ich nahm an, dass ".factory (...)" - Stuff eine Klasse sein soll, wobei _addList eine geschützte Funktion ist, aber anscheinend scheint _addList (zumindest modulweit) global zu sein und wird von der zweiten Definition überschrieben mit dem gleichen Namen, obwohl in einer anderen Fabrik.

Frage: Sicher, ich könnte in diesem Beispiel einfach den Namen einer der Funktionen ändern, aber ich würde eher eine Fabrik wie eine Klasse behandeln, so dass ich Namen von internen Funktionen zweimal verwenden kann. Also, was wäre der klügste Weg dazu?

Antwort

0

aber es scheint, dass _addList (zumindest Modul weit) global zu sein scheint, und wird durch die zweite Definition überschrieben

Natürlich ist es global, weil Sie es global deklariert. Initialisierungen ohne Deklarationen werden zu globalen Variablen. Also vergisst nie Ihre Variablen richtig zu erklären (const, let, var):

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

Es kann so einfach sein :) Vielen Dank –

0

Sie sind nicht var in Ihren Fabriken verwenden, die diese Funktionen global machen. Entweder var verwenden oder wenn Sie ES6 verwenden können, verwenden let Stichwort:

.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

Es kann so einfach sein :) Vielen Dank –

Verwandte Themen