我有这个应用程序有两个模块:
angular.module('components', []).directive('foo', function () { return {};});
angular.module('gaad', ['components']);
Run Code Online (Sandbox Code Playgroud)
有一堆与这个模块相关的指令,我不在这里.该应用程序工作正常.但是当我试图检索模块的注入器时gaad:
var injector = angular.injector(['gaad', 'components']); //called after 'gaad' module initialization
Run Code Online (Sandbox Code Playgroud)
抛出错误:
Uncaught Error: Unknown provider: $compileProvider from components
Run Code Online (Sandbox Code Playgroud)
该应用程序现在很大,我不知道我应该在哪里寻找错误.所以我的问题是:我的问题可能是什么原因?
编辑: 我能够复制我的问题:http://jsfiddle.net/selbh/ehmnt/11/
pko*_*rce 120
在回答问题之前,我们需要注意每个应用程序只有一个注入器实例,而不是每个模块.从这个意义上说,不可能为每个模块检索一个注射器.当然,如果我们采用顶级模块,它代表整个应用程序.从这个意义上说,应用程序和顶级模块似乎是等价的.这似乎是一个微妙的差异,但重要的是要理解,以便充分和正确地回答这个问题.
接下来,从我能理解你想获取的$injector,而不是创建它的一个新的实例.问题是,angular.injector它将$injector为指定为参数的模块(应用程序)创建一个新实例.这里必须明确指定主要的AngularJS模块(ng).所以,在这个代码示例中:
var injector = angular.injector(['gaad', 'components']);
Run Code Online (Sandbox Code Playgroud)
您试图从"gaad"和"components"模块中定义的组件创建新的注入器,显然$compileProvider未在自定义模块中定义.将ng模块添加到列表将通过创建新的注入器来"解决"问题 - 您可能不希望发生这种情况.
要实际检索与正在运行的应用程序关联的注入器实例,我们可以使用2种方法
$injector实例:http://docs.angularjs.org/api/angular.injectorangular.element([DOM element]).injector()[DOM元素]是ng-app定义的圆顶元素(或此元素的任何子元素).更多信息:http://docs.angularjs.org/api/angular.element这是jsFiddle显示2种注入器检索方法:http://jsfiddle.net/xaQzb/
另请注意,$injector直接使用不是单元测试之外的常见情况.从AngularJS世界之外检索AngularJS服务可能是有用的.更多信息:从遗留代码中调用Angular JS.
Rya*_*ill 13
看来您还需要在进样器中包含ng.
var injector = angular.injector(['ng', 'b', 'a']);
Run Code Online (Sandbox Code Playgroud)
必须明确添加ng模块.
| 归档时间: |
|
| 查看次数: |
38492 次 |
| 最近记录: |