如果ng-app与ui-view在同一个标​​签中,为什么量角器失败?

时间:2014-05-22 20:23:47

标签: angularjs protractor

我遇到一个问题,当 ng-app与(AngularUI) ui-view 位于同一标签上时,我的测试都没有运行,我得到: Error: Error while waiting for Protractor to sync with the page: {"message":"angular.element(...).injector(...) is undefined","stackTrace":[{"fileName":"http://localhost:3000/","lineNumber":71,"methodName":"anonymous/<"},{"fileName":"http://localhost:3000/","lineNumber":76,"methodName":"anonymous"},{"fileName":"http://localhost:3000/","lineNumber":68,"methodName":"handleEvaluateEvent"}]}

给我上述错误的Html: <html><head></head><body> <div ng-app="app" ui-view></div> </body></html>

如果我将 ui-view指令移动到嵌套div ,我的测试工作正常: <html><head></head><body> <div ng-app="app"> <div ui-view></div> </div> </body></html>

我的应用程序适用于任一标记配置,只有测试与第一个测试有错误。

这种行为的解释是什么?

1 个答案:

答案 0 :(得分:1)

问题是当在同一元素上声明ng-app和ui-view时,angular.element()。injector()是未定义的。但是,如果它们位于不同的元素上,则两个元素都存在注入器。

这是因为ui-router和angular之间的交互是因为ui-view指令使用了transclusion。使用与ng-app在同一元素上使用transclusion的指令导致它没有通过angular.element()。injector()的正确注入器。这是一个简单的例子:https://gist.github.com/juliemr/ffccf5bbe5b88a2d3da9

我认为这一切都按预期工作,解决方案是不要在同一元素上使用ng-app和ui-view。