2016-12-03 127 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

它是那麼容易:)非常感謝 –