angularjs – 无法从角度检索进样器

前端之家收集整理的这篇文章主要介绍了angularjs – 无法从角度检索进样器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个应用程序有两个模块:
angular.module('components',[]).directive('foo',function () { return {};});
angular.module('gaad',['components']);

有一堆与这个模块相关的指令,我不在这里。
应用程序工作正常。但是,当我试图检索注入器模块gaad:

var injector = angular.injector(['gaad','components']); //called after 'gaad' module initialization

则抛出错误

Uncaught Error: Unknown provider: $compileProvider from components

应用程序是相当大,现在,我不知道应该在哪里寻找错误
所以我的问题是:什么可能是我的问题的原因?

编辑:
我能够复制我的问题:http://jsfiddle.net/selbh/ehmnt/11/

在回答这个问题之前,我们需要注意每个应用程序只有一个注入器实例,而不是每个模块。在这个意义上,不可能每个模块检索一个喷油器。当然,如果我们采取顶层模块,它代表整个应用程序。在这个意义上,应用程序和顶级模块看起来是等效的。它可能看起来像一个微妙的差别,但重要的是要理解,以完全和正确地回答这个问题。

接下来,从我可以理解,你想检索$ injector,而不是创建一个新的实例。事情是,angular.injector将为指定为参数的模块(应用程序)创建一个新的$ injector实例。这里主要的AngularJS模块(ng)必须明确指定。所以,在这段代码示例中:

var injector = angular.injector(['gaad','components']);

你试图从’gaad’和’components’模块中定义的组件创建一个新的注入器,显然$ compileProvider没有在你的自定义模块中定义。将ng模块添加到列表将通过创建一个新的注射器“解决”问题,这可能是你不想发生的。

要实际检索与正在运行的应用程序相关联的注入器实例,我们可以使用2种方法

>从AngularJS JavaScript最简单的解决方案只是注入$ injector实例:http://docs.angularjs.org/api/angular.injector
>从angular.js外部调用angular.element([DOM element])。injector()其中[DOM element]是定义ng-app的圆顶元素(或该元素的任何子元素)。更多信息:http://docs.angularjs.org/api/angular.element

这里是jsFiddle显示注射器检索的2种方法http://jsfiddle.net/xaQzb/

还请注意,直接使用$ injector不是非常常见的单元测试之外的情况。从AngularJS世界之外检索AngularJS服务可能是有用的。更多信息:Call Angular JS from legacy code

猜你在找的Angularjs相关文章