在 Angular 中动态加载 html 控件

Dynamic loading of html controls in Angular

我正在研究 angular 7 中的数据报告解决方案。

我的应用程序将托管大约 200 多个报告,我想制作可重用的组件,因此我不需要预先创建 200 多个组件,如果我们加入新报告,则无需更改代码必填。

这个想法是…… 1. Report Parameters和Spname将存储在DB中 2. 根据报告参数,将显示报告标准部分。 3. 用户提供参数值并单击生成按钮,然后请求将发送到 REST 服务。 4. Rest服务会根据报表定义中提供的Spname从DB中获取数据,并返回给angular app.

报告参数示例,例如... FreeText => 因此用户可以输入任何字符串数据 Date => 至 select 报告日期 Multiselect => 显示多个 select 下拉框 singleselect => 允许用户一次 select 只有一个值。

问题是每个报告都是这些参数的不同组合,而且给定报告的参数可以重复,就像可能有一个报告需要两个日期(开始和结束),所以不能固定标准结构。

有什么方法可以在 运行 时生成控件并显示在组件上。 我能想到的一种方法是 Jquery。不确定这是否是实现此目标的正确方法。

任何可用于相同或任何其他方法的示例代码。

<div class="row">
    <div class="col-md-12">
        <div class="row">
            <div class="col-md-2">
                <div>
                    <button class="ev-button" style="float: right;" type="button">Generate Report</button>
                </div>
                <div>
                    <app-report-criteria></app-report-criteria>
                </div>
            </div>
            <div class="vl"></div>
            <div class="col-md-9">
                <app-report-data-display></app-report-data-display>
            </div>
        </div>
    </div>
</div>

我这里的代码只是将屏幕分成两部分,标准和数据。 我需要使 app-report-criteria 足够强大,以便根据报告标准 运行 生成控件

Angular 开发的第一条经验法则,不要将 jQuery 与它一起使用。

模板驱动程序表单的简单概念证明:

在您的 compenent.js 中生成参数数组:

    var params = [
        { name: "from", type: "date", classes: 'calendar' },
        { name: "to", type: "date", classes: 'calendar' },
        { name: "number", type: "number", classes: '' },
    ]

然后在你的组件中 html 你可以

<div *ngFor="let param of params">
    <input type="{{param.type}}" name="{{param.name}}" class="{{param.classes}}" /> 
</div>

如果每个参数类型都有一个组件,您可以改为:

<div *ngFor="let param of params" [ngSwitch]="param.type">

    <FreeText *ngSwitchCase="'text'" [name]="param.name" ... ></FreeText>

    <Date *ngSwitchCase="'date'" [name]="param.name" ... ></Date>

    <Multiselect *ngSwitchCase="'multi-select'" [name]="param.name" ... ></Multiselect >

    ...
</div>