如何在包含的Angular模块中内省地发现已定义的指令(或控制器等)?

时间:2013-12-05 13:43:54

标签: angularjs angularjs-directive code-injection angularjs-injector

我正在构建一个项目,我们有一个模块充当我们的shell,处理全局样式,导航等,ng:view由我们的第二个模块提供的指令填充所有页面。

我真的想找到一种方法让shell检查页面模块,动态发现导航结构,而不是手动定义它或让每个页面都注入pages模块和shell模块。就其本身而言,注射器似乎并不喜欢这样做。

修改

作为澄清:虽然我有一个使用pagesProvider服务的神话般的解决方法,但我仍然在寻找一个关于Angular 1.2.x是否具有内省模块的机制的答案。

1 个答案:

答案 0 :(得分:2)

首先:最后所有injected 对象(如服务,过滤器,控制器)最终会出现在一个大包中(类似于全局命名空间)。因此,将pagepages中的每个pages注入shell就足够了。 (注意名称冲突的可能性。)

其次:此时,不支持延迟加载模块。所以你应该事先知道所有模块 ,所以实际上不需要检查哪些对象存在,哪些不存在,因为它们都存在,或者应用程序已经存在根本没有开始。

通过发现nav structure以及如何定义,我不知道你究竟是什么意思。但是,你能做的是:

    每个页面模块中的
  1. 定义constant,其中将存储此页面的nav structure
  2. 在需要时从constant访问此shell。如果您需要动态了解活动页面的id,只需在页面被激活时将此信息设置在某处 - 可能为value
  3. 一些替代方案:

    1. hash-map s到page-id s定义一个全局page-nav-structure
    2. 使用将注入每个页面的公共服务,并将用于注册页面及其相关信息。