是否可以用角度中的元数据对数据模型进行注释



我有一个简单的数据模型,我想用元数据对其进行注释

export class Certification {
title: string;
certificationType?: CertificationType;
validTo?: number;
description?: string;
externalIdentifier: Guid;
constructor() {
this.title = '';
this.certificationType = CertificationType.Undefined;
this.validTo = 0;
this.description = '';
this.externalIdentifier = null;
}
}

我希望我能以某种方式对模型进行注释,就像一样

export class Certification {
@Heading() 
title: string;
certificationType?: CertificationType;
@Label('My label') 
validTo?: number;
description?: string;
@Hidden()
externalIdentifier: Guid;
constructor() {...}
}

我有很多非常相似的模型,所以我更喜欢创建一个简单的组件来处理所有模型的显示逻辑,而不是为每个模型创建一个组件,然后由每个单独的模板来控制差异。

我尝试使用typescript文档中定义的反射元数据api,如下所述:https://www.typescriptlang.org/docs/handbook/decorators.html#property-装饰工但是,即使元数据在构建时应用于模型,当我通过绑定进行分配时,它们似乎也会丢失。

<display-annotated-model [model]="certification"></display-annotated-model>

所以我的问题是,有人能做到这一点吗?

或者有没有一种不同的方法来注释我应该查看的数据模型(我已经用尽了谷歌搜索的能力(?

我需要在Angular 9中完成这项工作。欢迎任何输入:(

这是可能的。最初的注释计划会使其非常有用。不幸的是,这些注释变成了装饰器。作为装饰器,关于他们正在装饰的属性的任何元数据都存储在全局装饰器存储中。

Angular本身在编译时将其内置的装饰器(@Component((、@Directive((、@Pipe((、NgModel((、Injectable((等(转换回注释。

注释和装饰器之间的区别是什么?

注释只是元数据,存储在对象的实例上(取决于注释的内容(。

装饰器是可以修改属性访问器、方法、类的包装器,还可以提供每个属性访问器,方法或类的元数据。

由于decorator的这种动态特性,编译器无法判断底层代码是否可以安全地进行树摇动。

出于这个原因,在大多数情况下,decorator不适合用于浏览器代码。尽管可以为自定义装饰器创建自定义编译器插件,但这基本上就像Angular为其装饰器所做的那样。

我感兴趣的另一种方法是能够添加元数据来进行ReactiveForm声明。

下面是一个类似的例子:https://github.com/martinmcwhorter/modelmetadata

最新更新