angular - 如何将字符串转换为模板引用实例?
问题描述
我正在 *ngFor 中设置 ngTemplateOutlet,如下面的代码片段
<ul>
<li *ngFor="let item of list">
<ng-container [ngTemplateOutlet]="item.type"></ng-container>
</li>
</ul>
我在哪里list = [ {type: 'templateOne'}, {type: 'templateTwo'} ]
定义了如下模板。
<ng-template #templateOne></ng-template>
<ng-template #templateTwo></ng-template>
上面的模板片段与下面提到的消息一起引发错误
TypeError: templateRef.createEmbeddedView is not a function
at ViewContainerRef_.push../node_modules/@angular/core/fesm5/core.js.ViewContainerRef_.createEmbeddedView (core.js:21600)
at NgTemplateOutlet.push../node_modules/@angular/common/fesm5/common.js.NgTemplateOutlet.ngOnChanges (common.js:4026)
at checkAndUpdateDirectiveInline (core.js:22085)
由于item.type
使用的ngTemplateOutlet
是字符串类型,我怀疑它没有解析为 templateReference 变量。
如何将字符串转换为 templateReference 实例?
解决方案
这是工作示例:
import { Component,ViewChild,TemplateRef,OnInit } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<ul>
<li *ngFor="let item of list;let i = index">
<ng-container [ngTemplateOutlet]="list[i].type"></ng-container>
</li>
</ul>
<ng-template #templateOne>Template One</ng-template>
<ng-template #templateTwo>Template Two</ng-template>
`,
})
export class AppComponent implements OnInit {
@ViewChild('templateTwo', {read: TemplateRef}) tpl1: TemplateRef<any>;
@ViewChild('templateOne', {read: TemplateRef}) tpl2: TemplateRef<any>;
list;
ngOnInit() {
this.list=[{"type":this.tpl1},{"type":this.tpl2}];
}
}
推荐阅读
- python - “CustomerPurchaseOrder”对象没有属性“get_user_visible_fields”
- azure-functions - 如何将 Azurite blob 容器用作 Azure Function 内部存储和触发器?
- javascript - 尝试向外部 API 发出请求时出现 axios 错误
- c - 为什么一个简单的 C 程序会消耗大量磁盘空间?
- discord.py - 如何创建编号报告系统?
- angular - AWS 部署 SpringBoot+Angular+Mysql 抛出 HttpResponseError 500 不让我知道错误来自哪里
- javascript - WebXR - Android 11 上的“dom-overlay”可选功能
- mongodb - Ubuntu 20.04 中的 mongoDB 问题
- oracle - 为什么 CAST 会截断文本而不是抛出错误?
- spring - XML cacheManger bean:多个 CachingProviders 错误