如何在 ngFor 中添加 angular 元素选择器
How to add angular element selector inside the ngFor
我的项目中有 4 个 angular 元素(Web 组件)。我在 index.html <script src="web-angular-element.js"> </script>
中为这些 Web 组件添加了脚本标记,我想在我的 angular 应用程序中动态显示这些元素。我只是使用组件选择器在应用程序中显示它,并且选择器的名称来自基于用户访问的服务,如“”。
<div class="widgets-section" *ngFor="let widgets of userWidget">
<div class="wt">
<h3>{{widgets.name}}</h3>
</div>
<div class="wb">
{{widgets.code}}
</div>
<div class="wf">
<button class="button-standard">{{widgets.text}}</button>
</div>
</div>
这里的小部件代码是 widgets.code = <component-name></component-name>
即使我尝试了 "ngTemplateOutlet"
也无法正常工作
<ng-container *ngTemplateOutlet="widgets.code"></ng-container>
<ng-template #abc>
<component-name></component-name>
</ng-template>
我在这里传递的小部件代码是 widgets.code = "abc"
并且基于我尝试呈现组件的代码
您应该将 ngTemplateOutlet
绑定到 TemplateRef
变量。
下面这个简单的代码并不是您问题的完整解决方案,但它会为您提供动态组件的解决方案。剩下你要做的就是通过 widget.code
.
得到正确的 TemplateRef
HTML:
<ng-container *ngTemplateOutlet="carrentTemplate"></ng-container>
<ng-template #abc>
<component-name></component-name>
</ng-template>
<ng-template #def>
<component-name-2></component-name-2>
</ng-template>
TS:
carrentTemplate: TemplateRef<any>;
@ViewChild('abc') abc: TemplateRef<any>;
@ViewChild('def') def: TemplateRef<any>;
ngOnInit() {
if (true) { // some condition
this.currentTemplate = this.abc;
} else {
this.currentTemplate = this.def;
}
}
我的项目中有 4 个 angular 元素(Web 组件)。我在 index.html <script src="web-angular-element.js"> </script>
中为这些 Web 组件添加了脚本标记,我想在我的 angular 应用程序中动态显示这些元素。我只是使用组件选择器在应用程序中显示它,并且选择器的名称来自基于用户访问的服务,如“”。
<div class="widgets-section" *ngFor="let widgets of userWidget">
<div class="wt">
<h3>{{widgets.name}}</h3>
</div>
<div class="wb">
{{widgets.code}}
</div>
<div class="wf">
<button class="button-standard">{{widgets.text}}</button>
</div>
</div>
这里的小部件代码是 widgets.code = <component-name></component-name>
即使我尝试了 "ngTemplateOutlet"
<ng-container *ngTemplateOutlet="widgets.code"></ng-container>
<ng-template #abc>
<component-name></component-name>
</ng-template>
我在这里传递的小部件代码是 widgets.code = "abc"
并且基于我尝试呈现组件的代码
您应该将 ngTemplateOutlet
绑定到 TemplateRef
变量。
下面这个简单的代码并不是您问题的完整解决方案,但它会为您提供动态组件的解决方案。剩下你要做的就是通过 widget.code
.
TemplateRef
HTML:
<ng-container *ngTemplateOutlet="carrentTemplate"></ng-container>
<ng-template #abc>
<component-name></component-name>
</ng-template>
<ng-template #def>
<component-name-2></component-name-2>
</ng-template>
TS:
carrentTemplate: TemplateRef<any>;
@ViewChild('abc') abc: TemplateRef<any>;
@ViewChild('def') def: TemplateRef<any>;
ngOnInit() {
if (true) { // some condition
this.currentTemplate = this.abc;
} else {
this.currentTemplate = this.def;
}
}