【发布时间】:2019-08-22 20:17:07
【问题描述】:
我正在尝试构建一个可能包含不同组件的卡片列表;例如,我有以下对象数组:
{
title: 'Title',
descrption: 'Description',
template: 'table',
},
{
title: 'Title',
descrption: 'Description',
template: 'chart',
}
我将此数组作为来自服务的响应,然后我需要将每个对象与基于 template 属性的组件匹配,例如,第一项应匹配 TableComponent 和第二个给ChartComponent;
我正在尝试遵循有关 Dynamic Component Loading 的 Angular 文档,但我不确定如何告诉方法如何将数组中的每个对象与特定组件匹配。
在我的父组件中,我创建了一个锚点,组件应该使用指令加载:
<ng-template appCheckpointHost></ng-template>
我正在尝试使用示例中显示的ComponentFactoryResolver。
loadComponent() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChartCheckpointComponent);
const viewContainerRef = this.checkHost.viewContainerRef;
}
示例展示了“服务”每三秒运行一次,获取一个随机项,并显示出来的场景;但我想要做的是在父组件加载时获取所有项目,并使用其各自的组件呈现每个项目。
有什么想法可以让它发挥作用吗?
【问题讨论】:
-
你可以使用 ngSwitch(angular.io/api/common/NgSwitch) 根据模板值渲染组件
-
@ajaiJothi 是的有点想避免
ngSwitch;我不知道,但这感觉像是使用动态加载的更有效方式?不过可能是错的,不知道两者的优缺点 -
您需要在模板或 ts 文件中使用 switch 语句(如果您使用的是 componentFactory) - 因为您需要将组件引用传递给
resolveComponentFactory。我没有看到基于字符串值动态定位组件的方法
标签: javascript angular typescript single-page-application angular8