在angular应用程序中引用反射元数据或等效数据的正确方法
在本文中,我试图用自定义注释装饰MyModel上的属性。使用自定义装饰器取消对属性的注释,或者取消对导入“反射元数据”的注释在angular应用程序中引用反射元数据或等效数据的正确方法,angular,reflection,reflect-metadata,Angular,Reflection,Reflect Metadata,在本文中,我试图用自定义注释装饰MyModel上的属性。使用自定义装饰器取消对属性的注释,或者取消对导入“反射元数据”的注释和具有内联装饰器的属性生成: 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 decorat
代码>和具有内联装饰器的属性生成:
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”代码>您不会得到关于元数据()不是反射属性的代码自动完成和tsc错误
在angular中使用reflect API的正确方法是什么
编辑:
使用新的@angular/cli genrated应用程序,您可以导入'core js/es7/reflect'
位于pollyfills.ts
中,但您仍然会得到属性“metadata”在类型“typeof Reflect”上不存在。
如果您尝试Reflect.metadata()的任何组合
编辑2:
我似乎在angular cli中通过替换import'core js/es7/reflect'实现了这一点代码>使用导入“反映元数据”代码>在pollyfills.ts中,但我不知道它们是一对一的替代品,还是会产生影响。我不清楚这里的答案 我只是偶然发现了可能有用的方法。
我想你可能会对“第二个问题”部分感兴趣。我在尝试在angular应用程序中定义一些元数据时遇到了同样的问题,angular提供的反射似乎与window不同。因此,访问windows的reflect似乎为我解决了这个问题。我用过:
let reflect = window['Reflect'];
reflect.defineMetadata(metadataKey, metadataValue, target);
而不是
Reflect.defineMetadata(metadataKey, metadataValue, target);
我刚刚遇到了这个错误,到目前为止,我发现只有你犯了这个错误。我不需要为它导入任何东西,但tsc当然会抱怨defineMetadata
在Reflect
上不存在。我不知所措