2016-12-03 7 views
1

Я пытаюсь иметь 2 класса (в) цехах моего модуляугловой заводские внутренние функции не зависят от фабрики?

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 (...)» - Stuff является классом, где _addList является защищенной функцией, но кажется, что _addList кажется (по крайней мере, по модулю) глобальным и перезаписывается вторым определением с тем же именем, хотя на другой фабрике.

Вопрос: Конечно, я мог бы в этом примере просто изменить имя одной из функций, но я хотел бы больше обращаться к фабрике, подобной классу, чтобы дважды использовать имена внутренних функций. Итак, что было бы самым умным способом сделать это?

ответ

0

но мне кажется, что _addList, кажется (по крайней мере, модуль шириной) глобальные и переписывается вторым определением

Конечно, это глобальная, потому что вы объявили его в глобальном масштабе. Инициализация без деклараций становится глобальными переменными. Так что никогда не забывают объявить переменные правильно (const, let, var):

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

Это может быть так просто :) Большое спасибо –

0

Вы не используете 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

Это может быть так просто :) Спасибо много –

 Смежные вопросы

  • Нет связанных вопросов^_^