我使用的是reflect-metadata 0.1.2。我有一个父类作为" MyCustom"。
export class MyCustom {}
我的家庭"组件类扩展了这个" MyCustom"类。
@Component({
selector: 'home',
templateUrl: './app/components/home/home.html',
styleUrls: ['./app/components/home/home.css']
})
export class Home extends MyCustom {
}
我的目的是获取扩展的所有类的元数据" MyCustom"使用以下方法调用类。
let annotations = Reflect.getMetadata('annotations', MyCustom);
对方法Reflect.getMetadata()的评论说,
获取目标上提供的元数据键的元数据值 对象或其原型链。
然而我一无所获。如果我将@Component添加到" MyCustom"如下所示,
@Component({
selector: 'hello'
})
export class MyCustom {}
我得到一个结果,即" MyCustom"上的注释。
为什么我没有获得子类的注释?任何帮助都非常感谢。
答案 0 :(得分:1)
元数据保存为log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss, SSS} %-5p [%c] - %m%n
log4j.rootLogger = info, stdout
log4j.logger.org.hibernate = info
#following parameters will be used to log the sql parameters
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace
而不是Home
,并且继承在此处无效。
您可以做的是,拥有自己的装饰器,为父类添加元数据,然后使用所需的值调用MyCustom
装饰器。
类似的东西:
Component
我没有对它进行测试,之前没有做过类似的事情,但它应该可以正常工作。
为什么不使用“注册表”?
有这样的事情:
function MyComponent(props: any) {
return (ctor) => {
Reflect.defineMetadata('annotations', ctor.prototype.name, ctor.prototype);
return Component(props)(ctor);
}
}
@MyComponent({
selector: 'home',
templateUrl: './app/components/home/home.html',
styleUrls: ['./app/components/home/home.css']
})
class Home extends MyCustom {}
然后,对于每个这样的组件注册它:
const REGISTRY: { [name: string]: MyCustom } = {};
注册表和组件不必在同一个文件中,只要您在需要的地方导入它。
然后从主要组件中轻松获得所有这些组件。