【问题标题】:Angular itkn error caused by directives defined with function outside array由数组外函数定义的指令引起的角度 itkn 错误
【发布时间】:2015-04-15 15:01:04
【问题描述】:

我正在使用 Angular 1.3.15,也尝试过 1.2.28 以及 angular bootstrap。昨晚,在将 Chrome 更新到 v42.0.2311.90 后,我突然开始看到大量的角度 itkn 错误:

Error: [$injector:itkn] Incorrect injection token! Expected service name as string, got function ()
http://errors.angularjs.org/1.3.15/$injector/itkn?p0=function%20()
    at REGEX_STRING_REGEXP (angular.min.js?bust=undefined:63)
    at Object.invoke (angular.min.js?bust=undefined:4189)
    at angular.min.js?bust=undefined:6525
    at forEach (angular.min.js?bust=undefined:323)
    at Object.<anonymous> (angular.min.js?bust=undefined:6523)
    at Object.invoke (angular.min.js?bust=undefined:4204)
    at Object.enforcedReturnValue [as $get] (angular.min.js?bust=undefined:4056)
    at Object.invoke (angular.min.js?bust=undefined:4204)
    at angular.min.js?bust=undefined:4021
    at Object.getService [as get] (angular.min.js?bust=undefined:4162)

这在更新 Chrome 之前没有发生,但我想我不能说这肯定是相关的。

经过一探究竟,我发现任何这样定义的指令:

  .directive('modalTransclude', function () {
    return {
      // directive code
    };
  })

将导致此itkn 错误。我 console.logged key$inject 迭代器中的角度,它返回指令本身的功能,而不仅仅是明确意图的字符串。

我发现将函数包装在一个数组中,即使没有定义注入的任何字符串,它也可以解决问题:

  .directive('modalTransclude', [function () {
    return {
      // directive code
    };
  }])

但是,这个错误在 angular bootstrap 网站上没有发生,我在 angular 1.3 和 1.2 版本上都试过了。

我将继续寻找我的应用所特有的任何原因,但有人知道是什么原因造成的吗?

【问题讨论】:

  • Chrome 上发生了同样的事情,尽管只是针对我的引导模式。刚刚在 Firefox 上测试,他们似乎在那里工作
  • 我可以确认这个指令问题只会影响我的角度引导程序。我自己的任何自定义指令都可以正常工作,无论是否带括号。
  • 您的 chrome 中是否安装了 ng-inspector.org?对我来说,如果我关闭 ng-inspector,一切都会恢复到正常模式。不知道这到底是什么原因,没有时间深入研究。这种行为对我来说也是最近才出现的。
  • 我愿意!我不知道为什么我没有想到这一点。这解决了问题!如果您想将此作为答案发布,我会接受。
  • 完成。如果有人可以调查原因会很好。

标签: angularjs angular-bootstrap


【解决方案1】:

如果您在 chrome 中安装了 ng-inspector.org 扩展,这可能是一个原因。只需关闭 ng-inspector 浏览器扩展即可。

我不知道目前它不能与 ng-inspector 一起使用的确切原因。如果有人有时间对此进行研究,最好将错误提交给相关项目(我怀疑它是 ng-inspector 本身)。

【讨论】:

  • 这确实是 ng-inspector v0.5.9 版本的问题。更新到 v0.5.10(应该在 Chrome 重新启动时自动发生,或者您可以通过访问 chrome://extensions/ 并单击“立即更新扩展程序”来手动触发更新)。对于受此问题影响的所有人,我深表歉意。
  • 我注意到启用 Batarang (0.10.7) 的类似问题。 $injector 未定义。禁用扩展可以修复它。 ng-inspector:尝试调用指令时发生错误:myDirective TypeError:无法读取未定义(…)的属性“调用”
【解决方案2】:

这确实是昨天发布的 ng-inspector 0.5.9 版(我是它的维护者)出现的一个问题。我已经在为此制定解决方案,并将很快发布。

很抱歉给您带来不便 =(

编辑:刚刚发布了 v0.5.10,应该可以解决这个问题。如果您遇到更多困难,请随时在https://github.com/rev087/ng-inspector/ 提出问题

【讨论】:

  • 感谢您确认修复!对于那些必须花费数小时尝试调试一个不是他们的错的问题的人,我感到很糟糕 =(
【解决方案3】:

它应该可以工作,而无需定义方括号。方括号的唯一原因是为了 js 缩小。

AngularJs Directives Link

【讨论】:

  • 我知道。但是使用括号可以解决这个问题。这只是最新 ​​Chrome 中的一个问题。 Firefox/Safari 似乎没有受到影响。
【解决方案4】:

我昨天在 ng-inspector github repo 报告了同样的问题,并且已经尝试修复它(仍然不检查它是否工作) https://github.com/rev087/ng-inspector/issues/95#issuecomment-93423284

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多