2015-10-16 43 views
0

我知道我可以使用$injector.has('<constant name>')通過名字來獲得一個恆定的,但問題是我不知道名字的時間提前,我只想把所有的角常量的列表(例如)以「json_」開頭。我需要這個的原因是因爲我建立了一個模塊,人們可以插入自己的代碼,這就是爲什麼我不會提前知道名稱,但我至少可以讓程序員開始我需要的常量與「json_」一起工作。目前,我有告訴他們說出自己的常量正是「json1」,「json2」,「json3」等,並因爲用戶必須跟蹤他們在哪裏編號,它不是好的設計,這是不好的。似乎沒有任何東西直接在API中做我想做的事情。提取所有常量出角緩存

+0

你不應該依賴你在模塊中不知道的常量。你所描述的聽起來像一個糟糕的建築。 –

+0

感謝您的回覆,這不是我的模塊。我期待程序員在他們自己的角度應用程序中添加json_whatever常量。見[this](http://plnkr.co/3H1kgFKWsr341zsWLZvp)Plunker。 – Helzgate

+0

這使得它非常容易讓程序員JSON文件添加到他們的項目,它可以防止他們不必使用第三方插件的編程移動應用尤其是當JSON文件直接保存到存儲。此外,我不希望程序員不得不直接在代碼中嵌入json,這也很糟糕。我覺得,創建這些獨立的小json1.js常量文件是最簡單,直接的方法,除非有人有更好的主意。 – Helzgate

回答

1

在角度模塊中沒有內置的方法來獲取所有常量,但是您可以通過_invokeQueue循環來實現此目的,這是一個內部使用數組來保存給定角度模塊上的所有註冊服務的方法。如果你註冊了一個名爲json_objangular.module('app')不變,然後在angular.module('app')._invokeQueue中應包含數組:

['$provider', 'constant', ['json_obj', valueObj]]

所以,你可以得到的json_*常量列表:

function getJsonConstants(){ 

    var queue = angular.module('myApp')._invokeQueue; 

    var jsonConstant = []; 

    angular.forEach(queue, function(item){ 

     if(item[1] === 'constant'){ 
      if(item[2][0].match(/\bjson_/gi)){ 
       jsonConstant.push({ 
        key: item[2][0], 
        value: item[2][1] 
       }) 
      } 
     } 

    }) 

    return jsonConstant; 

} 

還有一件事,此函數只能返回所有在angular.module('myApp')中註冊的常量,如果myApp有任何依賴模塊,則應循環這些模塊中的所有_invokeQueue以獲得完整的常量列表。