在对prime-ng的模板和panelMenu进行了一些研发之后,我想出了以下解决方案。
我们可以使用primeng中MenuItem的command选项来传递一些可点击事件并处理模板的动态加载。
组件类和UI模板的代码修改如下。
组件类
export class ViewOrderDetailsComponent implements OnInit {
private viewDisplayItems: MenuItem[];
displayPageName: string;
studentSubPageName: string;
deptSubPageName: string;
helpSubPageName: string;
constructor() {
this.viewDisplayItems = [
{
label: 'student', command: (onclick) => this.displayPageName = 'studentPage',
items: [
{ label: 'addStudent', command: (onclick) => this.studentSubPageName = 'addStudentPage' }
]
},
{
label: 'department', command: (onclick) => this.displayPageName = 'departmentPage',
items: [
{ label: 'addDepartment', command: (onclick) => this.deptSubPageName = 'addDepartmentPage'},
{ label: 'deleteDepartment', command: (onclick) => this.deptSubPageName = 'deleteDepartmentPage' }
]
},
{
label: 'help', (onclick) => this.displayPageName = 'helpPage',
items: [
{ label: 'searchStudent', command: (onclick) => this.helpSubPageName = 'searchStudentPage' },
{ label: 'searchDepartment', command: (onclick) => this.helpSubPageName = 'searchDepartmentPage' }
]
}
];
}
ngOnInit() {
}
}
HTML 模板
<div class="container-fluid">
<div class="panel-div">
<p-panelMenu [model]="viewDisplayItems">
</p-panelMenu>
</div>
<div class="template-div">
<ng-container *ngIf="displayPageName === 'studentPage'; then displayStudentPage; else checkDisplay1">
</ng-container>
<ng-template #checkDisplay1>
<ng-container *ngIf="displayPageName === 'departmentPage'; then displayDepartmentPage; else checkDisplay2"/>
</ng-template>
<ng-template #checkDisplay2>
<ng-container *ngIf="displayPageName === 'helpPage'; then displayHelpPage; else displayStudentPage"/>
</ng-template>
<ng-template #displayStudentPage>
//code for Displaying students
//As we have subdivisions in student, those are included as shown below
// we have only one subdivision addStudent, So both in if and else we included the same template name
<ng-container *ngIf="studentSubPageName === 'addStudentPage'; then addStudentPage; else addStudentPage">
</ng-container>
<ng-template #addStudentPage>
//code for add Student
</ng-template>
</ng-template>
<ng-template #displayDepartmentPage>
//code for Displaying Departments
//As we have subdivisions in department, those are included as shown below
<ng-container *ngIf="deptSubPageName === 'addDepartmentPage'; then addDeptPage; else deleteDeptPage">
</ng-container>
<ng-template #addDepartmentPage>
//code for add Departments
</ng-template>
<ng-template #deleteDeptPage>
//code for deleting Departments
</ng-template>
</ng-template>
<ng-template #displayHelpPage>
//code for help Page
//As we have subdivisions in help, those are included as shown below
<ng-container *ngIf="helpSubPageName === 'searchStudentPage'; then studentSearchPage; else deptSearchPage">
</ng-container>
<ng-template #studentSearchPage>
//code for searching Students
</ng-template>
<ng-template #deptSearchPage>
//code for searching Departments
</ng-template>
</ng-template>
</div>
</div>
如果有人找到更好的解决方案并在这里分享将不胜感激。
谢谢。