首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在angular应用中引用reflect-metadata或等效元数据的正确方法

在angular应用中引用reflect-metadata或等效元数据的正确方法
EN

Stack Overflow用户
提问于 2017-02-17 08:13:14
回答 1查看 1.5K关注 0票数 2

在这个plunker中,我试图用一个自定义注释来修饰MyModel上的一个属性。取消注释带有自定义装饰器的属性或取消注释import 'reflect-metadata';和带有内联装饰器的属性会生成:

代码语言:javascript
复制
Error: Cannot resolve all parameters for 'Parser'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'Parser' is decorated with Injectable. at NoAnnotationError.ZoneAwareError

我可以只取消注释内联装饰器,但是在没有import 'reflect-metadata';的编辑器中,你不会得到代码自动完成和关于元数据()不是Reflect属性的tsc错误。

在angular中使用reflect API的正确方法是什么?

编辑:

有了一个新的@angular/cli生成的应用程序,你可以在pollyfills.ts中使用import 'core-js/es7/reflect';,但如果你尝试Reflect.metadata()的任何组合,你仍然会得到Property 'metadata' does not exist on type 'typeof Reflect'.

Edit2:我似乎在angular cli中用import 'reflect-metadata';替换了pollyfills.ts中的import 'core-js/es7/reflect';,但我不知道它们是不是一对一的替代,或者是否有影响。这里的答案对我来说并不清楚。Angular2 using either npm reflect-metadata or core-js/es7/reflect

EN

回答 1

Stack Overflow用户

发布于 2017-03-07 17:20:09

我只是偶然发现了this article,它可能会有所帮助。我想你可能会对“第二个问题”的部分感兴趣。我在尝试在angular应用程序中定义一些元数据时遇到了同样的问题,似乎angular提供了与window不同的反映。因此,访问windows的反射似乎可以解决我的问题。我使用:

代码语言:javascript
复制
let reflect = window['Reflect'];
reflect.defineMetadata(metadataKey, metadataValue, target);

而不是

代码语言:javascript
复制
Reflect.defineMetadata(metadataKey, metadataValue, target);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42287150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档