Я не знаю, возможно ли это, но я построил динамический c компонент формы, который работает довольно хорошо, и я могу управлять несколькими элементами через файл конфигурации.
Один элемент у меня есть Не удалось проконтролировать ширину поля ввода, я пробовал десяток способов, но ни один из них не помог. т.е. установка ширины в компоненте при создании элемента управления формы и т. д. c
Кто-нибудь знает, возможно ли то, что я пытаюсь сделать, и может указать мне правильное направление.
Код шаблона
<div fxLayout="row">
<div [formGroup]="formGroup" fxLayoutAlign="start" fxLayoutGap="10px">
<div *ngFor="let form_elem of formTemplate">
<div *ngIf="form_elem.visible === 'true'">
<mat-form-field>
<mat-label>{{ form_elem.label }}</mat-label>
<input
matInput
type="text"
formControlName="{{ form_elem.name }}"
class="{{ form_elem.width }} "
/>
</mat-form-field>
</div>
</div>
</div>
</div>
Код машинописи
import {
ChangeDetectionStrategy,
Component,
EventEmitter,
Input,
Output
} from "@angular/core";
import { FormGroup, FormControl } from "@angular/forms";
@Component({
selector: "fw-form-array-item",
templateUrl: "./form-array-item.component.html",
styleUrls: ["./form-array-item.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FormArrayItemComponent {
@Output() remove = new EventEmitter<FormGroup>();
@Input() formGroup: FormGroup;
@Input() formTemplate: any;
constructor() {}
ngOnInit() {
let group = {};
this.formTemplate.forEach(input_template => {
group[input_template.label] = new FormControl('');
});
}
}
Файл конфигурации шаблона формы
export class OrdersProductsFormTemplate {
config = [
{
type: "textBox",
label: "id",
name: "id",
width: "50%",
justify: "left",
visible: 'true',
disabled: true
},
{
type: "textBox",
label: "Name",
name: "name",
width: "100%",
justify: "left",
visible: 'true',
disabled: false
},
{
type: "textBox",
label: "Currency",
name: "currency",
width: "100%",
justify: "left",
visible: 'true',
disabled: false
},
{
type: "textBox",
label: "Retail",
name: "retailPrice",
width: "100%",
justify: "left",
visible: 'true',
disabled: false
},
{
type: "textBox",
label: "Supplier Price",
name: "supplierPrice",
width: "100%",
justify: "left",
visible: 'true',
disabled: false
}
];
}