在这个plunker中,我试图用一个自定义注释来修饰MyModel上的一个属性。取消注释带有自定义装饰器的属性或取消注释import 'reflect-metadata';和带有内联装饰器的属性会生成:
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
发布于 2017-03-07 17:20:09
我只是偶然发现了this article,它可能会有所帮助。我想你可能会对“第二个问题”的部分感兴趣。我在尝试在angular应用程序中定义一些元数据时遇到了同样的问题,似乎angular提供了与window不同的反映。因此,访问windows的反射似乎可以解决我的问题。我使用:
let reflect = window['Reflect'];
reflect.defineMetadata(metadataKey, metadataValue, target);而不是
Reflect.defineMetadata(metadataKey, metadataValue, target);https://stackoverflow.com/questions/42287150
复制相似问题