Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Angular 5组件中读取TypeDecorator_Angular_Angular Compiler_Angular5 - Fatal编程技术网

从Angular 5组件中读取TypeDecorator

从Angular 5组件中读取TypeDecorator,angular,angular-compiler,angular5,Angular,Angular Compiler,Angular5,以前,我能够使用Reflect元数据获取组件的元数据。现在元数据已移动到附加到组件的一些注释中 读取元数据本身 type['__annotations__'][0].selector 这绝对是个黑客。从组件读取此类元数据的正确方法是什么?我想在@component装饰器中获取附加到组件的数据。如果您需要的是选择器,这是获取它的好方法 constructor(public elementRef: ElementRef<any>) {} ... const nodeName = thi

以前,我能够使用Reflect元数据获取组件的元数据。现在元数据已移动到附加到组件的一些注释中

读取元数据本身

type['__annotations__'][0].selector

这绝对是个黑客。从组件读取此类元数据的正确方法是什么?我想在
@component
装饰器中获取附加到组件的数据。

如果您需要的是选择器,这是获取它的好方法

constructor(public elementRef: ElementRef<any>) {}
...
const nodeName = this.elementRef.nativeElement.nodeName.toLowerCase();
...
构造函数(public elementRef:elementRef){}
...
const nodeName=this.elementRef.nativeElement.nodeName.toLowerCase();
...

我有一个可以声明为元素或属性的组件。这种方法让我知道宿主元素是div(当我的组件是属性时)还是组件的选择器。

为什么首先需要访问元数据(好奇,但也担心)@JBNizet我正在动态创建控件,并且该控件在创建时需要有[formControl]属性。因此,我发现创建此类控件并将此属性正确绑定到Angular的唯一方法是使用类似的模板字符串进行compiler.compileModuleandAllComponents同步。我不确定是否理解(被动表单允许动态创建控件),但您确实需要知道,您的方法违背了angular的原则和历史:部署的应用程序通常应该没有可用的编译器(因为它是用AOT编译器预编译的),也没有元数据(仍然是因为AOT编译)。我建议您重新问这个问题,因为这可能是XY问题。访问decorator元数据肯定不是生产中想要做的事情。事实上,它应该以类似于
\uuuuuu注释\uuuuuu
的黑客方式访问,这证实了这一点。正如前面提到的,AOT编译不会有任何注释。我不同意你的两个评论。我的应用程序非常动态,部分内容需要动态编译。我不会放弃编译器。如果我能实例化一个
组件
,并附加一个反应式表单,比如
类型
中的[formControl],我会很高兴,但如果不进行动态模板编译,我就不会发现这一点。当然,我的问题提到了一个解决方案,但当我在没有尝试的情况下问问题时,人们会生气,我没有展示我迄今为止尝试过的东西。