【问题标题】:AdminCtrl is not using explicit annotation and cannot be invoked in strict? angular meteorAdminCtrl 没有使用显式注释,不能严格调用?角流星
【发布时间】:2018-06-16 20:27:10
【问题描述】:

使用 ng-strict-di 时的错误快照开发

我正在流星中开发项目,如果我在开发中不使用 ng-strict-di 它可以正常工作,但是在生产中(在构建之后)我面临以下问题:

流星生产中的错误

开发错误:

错误列号:12 文件名: “本地主机:3007/packages/modules.js?hash=f352b06ef868d8ef612a0e02d3fc1da778e4f6d6” lineNumber:895 消息:“[$injector:strictdi] AdminCtrl 未使用 显式注释,不能严格调用 模式\nerrors.angularjs.org/1.6.8/$injector/strictdi?p0=AdminCtrl" 堆: “minErr /

生产(构建)

错误:[$injector:unpr] 未知提供者:tProvider

【问题讨论】:

  • 节点版本:4.5.0 流星:METEOR@1.4.1.3
  • 请勿粘贴源代码图片或错误信息!请阅读Why not upload images of code on SO when asking a question?
  • 另外,为了好玩,如果你像我一样是个白痴,请确保你有$inject而不是inject,当你认为你正确地注释了你的依赖项时。 /叹息

标签: javascript angularjs meteor angular-meteor


【解决方案1】:

您正在strict dependency injection 模式下引导 Angular。这会导致 Angular 在遇到未显式注释的依赖项时抛出异常。这是一种强制开发人员防止依赖项名称被缩小的方法。

来自documentation

如果该属性存在于 app 元素上,则注入器将 在“strict-di”模式下创建。这意味着应用程序将失败 调用不使用显式函数注释的函数(和 因此不适合缩小),如依赖项中所述 注入指南和有用的调试信息将有助于跟踪 找出这些错误的根源。

错误告诉你你没有明确地注释你的AdminCtrl-controller。要解决此问题,您的代码应如下所示:

angular.module('app').controller('AdminCtrl', ['firstDependency', 'secondDependency', 
   function(firstDependency, secondDependency){
       // Controller body
   }]);

或使用$inject:

angular.module('app').controller('AdminCtrl', AdminCtrl);

AdminCtrl.$inject = ['firstDependency', 'secondDependency'];
function AdminCtrl(firstDependency, secondDependency){
    // Controller body
}

如果您使用 grunt、gulp 或 webpack 等构建工具以及 ngAnnotate 包,则可以自动为您完成第二种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多