使用ng-strict-di时,使用ngbp框架的AngularJS 1.3不会在chrome浏览器中加载

时间:2014-09-04 00:18:32

标签: angularjs google-chrome ngboilerplate

我正在使用ngbp framework(以前的ng-boilerplate)处理AngularJS Web应用程序,默认情况下使用AngularJS 1.2。该项目处于早期阶段,因此我们正在尝试使用AngularJS 1.3而不是1.2,因为它有一些我们想要使用的很好的功能。我们也在假设AngularJS 1.3可能是我们上线时的发布版本的情况下工作。

所以我只是在bower.json文件中切换AngularJS版本号,除了我启用严格依赖注入(ng-strict-di)之外,一切似乎在Chrome,Safari和Firefox中都能正常工作。当严格的DI模式打开时,我得到以下错误(more detail here),但它只出现在Chrome中(FF和Safari都仍然按预期工作)。

Failed to instantiate module ng due to:
Error: [$injector:strictdi] function($provide) is not using explicit annotation and cannot be invoked in strict mode
http://errors.angularjs.org/1.3.0-build.3121+sha.a4520a7/...)
    at http://localhost:8080/assets/ngbp-0.3.2.js:87:12
    at annotate (http://localhost:8080/assets/ngbp-0.3.2.js:3352:17)
    at Object.invoke (http://localhost:8080/assets/ngbp-0.3.2.js:4036:21)
    at runInvokeQueue (http://localhost:8080/assets/ngbp-0.3.2.js:3964:35)
    at http://localhost:8080/assets/ngbp-0.3.2.js:3973:11
    at forEach (http://localhost:8080/assets/ngbp-0.3.2.js:338:20)
    at loadModules (http://localhost:8080/assets/ngbp-0.3.2.js:3954:5)
    at createInjector (http://localhost:8080/assets/ngbp-0.3.2.js:3894:11)
    at doBootstrap (http://localhost:8080/assets/ngbp-0.3.2.js:1494:20)
    at bootstrap (http://localhost:8080/assets/ngbp-0.3.2.js:1509:12

似乎由于某种原因,角度源代码本身未通过严格的DI测试,因此无法在ngbp框架内加载Chrome浏览器。上述错误来自ngbp的新克隆,唯一的变化是AngularJS(1.3)的版本,而不是我们的实际项目(尽管两种情况下的错误都相同)。我知道这个版本的ngbp并没有正式支持Angular 1.3,但正如我所说,即使它没有通过这个测试,应用程序似乎也可以正常运行。我想知道是否有人可能对导致此错误的原因有所了解,以及是否继续使用AngularJS 1.3和ngbp(版本:0.3.2)的组合是不明智的? ngbp中是否还有其他东西需要随AngularJS的版本一起更改?

如果有助于我通过cd ../bin; http-server -p 8080在本地提供文件。如果有任何其他信息可以帮助我告诉我,并且我很乐意尽可能地提供它。

感谢您的时间。

编辑:如果它有助于我在OS X 10.9.4上使用以下浏览器版本进行测试:

  • Chrome(版本36.0.1985.143)
  • 64位Chrome(版本37.0.2062.94)
  • Firefox(31.0)
  • Safari(版本7.0.5(9537.77.4))

1 个答案:

答案 0 :(得分:19)

看起来您可能正在使用batarang,但它与ng-strict-di不兼容。尝试从谷歌浏览器开发工具中禁用batarang,应用程序应该再次正常启动。


[edit] AngularJS batarang现在支持ng-strict-di以来v0.5.0。不应再发生此错误。