2015-10-16 46 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以获得完整的常量列表。