Угловая форма материала на основе свойств типа

0

Вопрос

У меня есть компонент диалога, который отображается, когда я нажимаю кнопку "Изменить" рядом с элементом в таблице. На данный момент компонент диалога выглядит следующим образом:

    <h1 mat-dialog-title>{{item.ID}}</h1>
<div mat-dialog-content>
    <p>Edit item</p>
    <mat-form-field appearance="outline" style="justify-content: center;">
        <mat-label>ID</mat-label>
        <input matInput [(ngModel)]="item.ID">
    </mat-form-field>
    <mat-form-field appearance="outline">
        <mat-label>Name</mat-label>
        <input matInput [(ngModel)]="item.Name">
    </mat-form-field>
    <mat-form-field appearance="outline">
        <mat-label>Date</mat-label>
        <input matInput [(ngModel)]="item.Date">
    </mat-form-field>
</div>
<div mat-dialog-actions style="justify-content: center;">
    <button mat-button (click)="onNoClick()">Cancel</button>
    <button mat-button [mat-dialog-close]="item.ID" cdkFocusInitial>Save</button>
</div>

Это выглядит и работает нормально, и служит своей цели. Но теперь у меня есть несколько других таблиц с различными типами данных, и, хотя я могу создать отдельный диалог для каждой таблицы и добавить поля формы вручную для каждого типа, я хотел бы иметь более гибкое решение.

Как я могу создать диалоговое окно, в котором поля формы добавляются в зависимости от типа ссылочного элемента? Например: Если у меня есть объект типа "Фрукты" в одной таблице с такими свойствами, как "Имя", "Цвет", "Цена", и объект типа "Автомобиль" со свойствами, такими как "Имя", "Произведено", "Мощность", могу ли я использовать один и тот же компонент диалога и динамически создавать форму?

angular angular-material html typescript
2021-11-23 18:33:47
1

Лучший ответ

0

Конечно, можно создать единую универсальную динамическую форму, но это станет слишком сложно. Как только возникнет необходимость в логике только для одного типа объекта (например, для отключения поля "а", если выбрано определенное значение в поле "в").

2021-11-23 19:49:26

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................