Angular2 装饰器未定义

Posted

技术标签:

【中文标题】Angular2 装饰器未定义【英文标题】:Angular2 decorators are not defined 【发布时间】:2016-06-09 23:19:54 【问题描述】:

我的项目是使用 webpack 构建的,但是当我从 localhost 托管应用程序时出现错误。

未捕获的引用错误:__decorate 未定义。

最初我得到了 Injectable() 装饰器的错误。但是当我取消注释时,我得到了同样的错误,但扩展了。

我创建了一个重复错误的存储库。https://github.com/shawnrmoss/decorators

我怀疑这与打字有关,因为当我不得不更改这些定义时问题就开始了。 typings_orig.json 具有原始类型定义

我不确定发生了什么。希望有人能对此有所启发并帮助我。

谢谢。

【问题讨论】:

您能给我们提供更多关于您使用什么的详细信息吗? ES5、ES6、TypeScript? 当然:angular 2 2.0.0.0-beta.0,typescript 1.7.5,es6 Uncaught ReferenceError: decorate is not defined(anonymous function) @ auth.service.ts:6(anonymous function) @ auth.service.ts:87__webpack_require @ bootstrap 435ddfde67fa15c11a9e: 50(匿名函数)@main.ts:1__webpack_require__@bootstrap 435ddfde67fa15c11a9e:50webpackJsonpCallback@bootstrap 435ddfde67fa15c11a9e:21(匿名函数)@main.bundle.js:1 一切正常。然后我有一个硬盘驱动器故障。必须从我们的存储库下载项目并重新安装 node_modules。从那以后我得到这个错误 谢谢!您是否包含了angular2-polyfills.js 文件? 【参考方案1】:

我认为您没有将 Reflect-metadata 库导入到您的项目中。这个库由 Angular 提供,感谢 angular2-polyfills.js 文件。该库包含 ZoneJS 和 Reflect-metadata。

这个库被装饰者使用,特别是@Injectable 。他们在内部使用Reflect.decorate 函数。

从您的评论看来,您似乎只导入了 es6-promise 和 zone-microtask...

我从 angularclass 入门套件开始。在供应商 ts 文件中,它有这个 //(这些模块在 'angular2/bundles/angular2-polyfills' 中,所以不要在这里使用它) import 'es6-promise';导入'zone.js/lib/browser/zone-microtask';

这篇文章可以帮到你,找Reflect.decorate

http://blog.wolksoftware.com/decorators-reflection-javascript-typescript

【讨论】:

非常感谢您的帮助。我阅读了您提供的文章,但我仍然不知所措。我创建了一个精简的 repo,它复制了我得到 github.com/shawnrmoss/decorators.git 的错误

以上是关于Angular2 装饰器未定义的主要内容,如果未能解决你的问题,请参考以下文章

装饰器未在JBOSS 7和jdk8中加载

Angular2 中的 ViewChildren 装饰器可以与接口一起使用吗?

Angular 2(2.0.0 到 2.2.0~)在使用“import 'reflect-metadata'”行添加自定义装饰器时出错

被装饰的函数保存元数据

使用类装饰器时需要 Angular2 反射元数据填充程序

typescript 使用脑部的angular2的装饰器的示例实现