如何将两个带不同Kendo DatePicker属性的Ng-template合并为一个?
合并Ng-template实现动态切换Kendo DatePicker配置
完全可行,你可以通过动态绑定属性和统一的点击事件处理器将两个模板合并为一个,核心思路是把DatePicker的差异化属性抽成配置对象,点击按钮时切换配置并复用同一个模板。
实现步骤:
- 在组件类中定义日度/月度两种DatePicker配置,以及当前激活的配置变量
- 统一点击事件处理函数,根据按钮类型切换配置并执行报告生成逻辑
- 将单个Ng-template中的DatePicker属性绑定到当前激活的配置对象
具体代码示例:
组件TS代码:
import { Component } from '@angular/core'; @Component({ selector: 'app-report-generator', templateUrl: './report-generator.component.html' }) export class ReportGeneratorComponent { reportStartDate: Date; reportEndDate: Date; // 定义两种DatePicker配置 private datePickerConfigs = { daily: { bottomView: undefined, topView: undefined, format: 'yyyy-MM-dd' }, monthly: { bottomView: 'year', topView: 'decade', format: 'MMMM yyyy' } }; // 当前激活的配置 currentDatePickerConfig = this.datePickerConfigs.daily; // 统一的报告生成函数 generateReport(reportType: 'daily' | 'monthly', format: 'pdf' | 'csv' | 'xlsx' | 'txt') { // 切换对应配置 this.currentDatePickerConfig = this.datePickerConfigs[reportType]; // 保留原报告生成逻辑,比如根据类型和格式处理 console.log(`生成${reportType}报告,格式:${format}`); } }
模板HTML代码:
<ul class="list-group"> <li class="list-group-item flex-fill border-0"> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('daily', 'pdf')">PDF</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('daily', 'csv')">CSV</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('daily', 'xlsx')">XLSX</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('daily', 'txt')">TXT</button> </li> </ul> <ul class="list-group"> <li class="list-group-item flex-fill border-0"> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('monthly', 'pdf')">PDF</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('monthly', 'csv')">CSV</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('monthly', 'xlsx')">XLSX</button> <button type="button" class="btn btn-link btn-sm" (click)="generateReport('monthly', 'txt')">TXT</button> </li> </ul> <!-- 单个复用的Ng-template --> <ng-template #itemListRef kendoCalendarMonthCellTemplate let-context="cellContext"> <form> <div> <kendo-datepicker [(ngModel)]="reportStartDate" [ngModelOptions]="{standalone: true}" [bottomView]="currentDatePickerConfig.bottomView" [topView]="currentDatePickerConfig.topView" [format]="currentDatePickerConfig.format"> </kendo-datepicker> </div> <div> <kendo-datepicker [(ngModel)]="reportEndDate" [ngModelOptions]="{standalone: true}" [bottomView]="currentDatePickerConfig.bottomView" [topView]="currentDatePickerConfig.topView" [format]="currentDatePickerConfig.format"> </kendo-datepicker> </div> </form> </ng-template>
说明:
- 移除了原有的
itemListRef1模板,仅保留一个itemListRef实现复用 - DatePicker的差异化属性通过
currentDatePickerConfig动态绑定,点击按钮时自动切换配置 - 统一了
generateReport函数,通过传入reportType区分日度/月度报告,同时切换对应配置 - 合并了原代码中冗余的
reportStartEnd变量,统一使用reportStartDate
内容的提问来源于stack exchange,提问作者Marek
相关产品推荐
相关产品推荐

