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

Posted

技术标签:

【中文标题】使用 ng-strict-di 时,带有 ngbp 框架的 AngularJS 1.3 不会在 chrome 浏览器中加载【英文标题】:AngularJS 1.3 with ngbp framework doesn't load in chrome browser when using ng-strict-di 【发布时间】:2014-10-28 14:45:09 【问题描述】:

我正在使用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) 火狐 (31.0) Safari(版本 7.0.5 (9537.77.4))

【问题讨论】:

你在使用batarang吗? @psp 感谢您的回复。我确实使用了batarang,但在这种情况下它并不是特别有用,因为AngularJS实际上从未在Chrome中加载,因此没有什么可供batarang分析的。 这可能是当时的问题,之前也有类似的情况 【参考方案1】:

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


[编辑] AngularJS batarang 现在支持ng-strict-di,因为v0.5.0。此错误不应再发生。

【讨论】:

是的!那绝对是问题所在!我从来没有想过batarang会干扰,但确实禁用它确实起到了作用。非常感谢您的帮助! 相应的batarang问题:github.com/angular/angularjs-batarang/issues/138 谢谢,您为我节省了很多时间!我永远不会猜到它是Batarang。不知道为什么我首先安装它..

以上是关于使用 ng-strict-di 时,带有 ngbp 框架的 AngularJS 1.3 不会在 chrome 浏览器中加载的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性

E00114 在 Authorize.net 中使用接受 JS 创建带有付款随机数的订阅时,OTS 令牌无效

带有 ReactJS 的 ASP.NET 6 - 使用 react-scripts 5.0.0 热重载时浏览器不刷新

在 ASP.NET 中使用带有友好 URL 的 Response.Redirect

当使用带有 EF 4.1 Code First 的 ASP.NET MVC 3 时,我只能编辑主表,我做错了啥?

带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错