Angular itkn 错误由数组外的函数定义的指令引起
Angular itkn error caused by directives defined with function outside array
我正在使用 Angular 1.3.15,也尝试过 1.2.28,以及 angular bootstrap。昨晚,在更新 Chrome 到 v42.0.2311.90 后,我突然开始看到大量 angular 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 $inject
迭代器中的 key
在 angular 中,它返回指令本身的函数,而不仅仅是像明确预期的那样的字符串。
我发现将函数包装在一个数组中,即使没有定义注入的任何字符串,也可以解决问题:
.directive('modalTransclude', [function () {
return {
// directive code
};
}])
但是,angular bootstrap 网站上并没有出现这个错误,我已经在 angular 1.3 和 1.2 版本上都试过了。
我会继续寻找我的应用特有的任何原因,但有人知道是什么原因造成的吗?
它应该可以工作,无需定义方括号。方括号的唯一原因是为了 js 缩小。
如果您在 chrome 中安装了 ng-inspector.org 扩展,这可能是一个原因。只需关闭 ng-inspector 浏览器扩展。
我不知道它目前不能与 ng-inspector 一起工作的确切原因。如果有人有时间研究这个,最好将错误提交给相关项目(我怀疑它是 ng-inspector 本身)。
这确实是昨天发布的 ng-inspector(我是它的维护者)0.5.9 版中出现的一个问题。我已经在为此制定解决方案,并将很快发布。
对于给您带来的不便,我深表歉意=(
编辑: 刚刚发布 v0.5.10,应该可以解决这个问题。如果您遇到更多困难,请随时在 https://github.com/rev087/ng-inspector/
提出问题
我昨天在 ng-inspector github 回购报告了同样的问题并且已经尝试修复它(仍然不检查它是否有效)
https://github.com/rev087/ng-inspector/issues/95#issuecomment-93423284
我正在使用 Angular 1.3.15,也尝试过 1.2.28,以及 angular bootstrap。昨晚,在更新 Chrome 到 v42.0.2311.90 后,我突然开始看到大量 angular 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 $inject
迭代器中的 key
在 angular 中,它返回指令本身的函数,而不仅仅是像明确预期的那样的字符串。
我发现将函数包装在一个数组中,即使没有定义注入的任何字符串,也可以解决问题:
.directive('modalTransclude', [function () {
return {
// directive code
};
}])
但是,angular bootstrap 网站上并没有出现这个错误,我已经在 angular 1.3 和 1.2 版本上都试过了。
我会继续寻找我的应用特有的任何原因,但有人知道是什么原因造成的吗?
它应该可以工作,无需定义方括号。方括号的唯一原因是为了 js 缩小。
如果您在 chrome 中安装了 ng-inspector.org 扩展,这可能是一个原因。只需关闭 ng-inspector 浏览器扩展。
我不知道它目前不能与 ng-inspector 一起工作的确切原因。如果有人有时间研究这个,最好将错误提交给相关项目(我怀疑它是 ng-inspector 本身)。
这确实是昨天发布的 ng-inspector(我是它的维护者)0.5.9 版中出现的一个问题。我已经在为此制定解决方案,并将很快发布。
对于给您带来的不便,我深表歉意=(
编辑: 刚刚发布 v0.5.10,应该可以解决这个问题。如果您遇到更多困难,请随时在 https://github.com/rev087/ng-inspector/
提出问题我昨天在 ng-inspector github 回购报告了同样的问题并且已经尝试修复它(仍然不检查它是否有效) https://github.com/rev087/ng-inspector/issues/95#issuecomment-93423284