#angular #devextreme
#angular #devextreme
Вопрос:
в моем приложении angular я планирую использовать поле выбора в нескольких формах. Для этого я создал общий компонент, подобный этому:
<dx-select-box [dataSource]="companies"
valueExpr="id"
displayExpr="name"
openOnFieldClick="true"
deferRendering="false"
noDataText="Nincs megjelenítendő adat"
placeholder="Kérlek válassz"
[value]="valueId">
</dx-select-box>
Соответствующий ts-файл:
import { Component, Input } from '@angular/core';
import { CompanyService } from '../../../services/masterdata/general/company.service';
import { Company } from '../../../models/masterdata/general/company.model';
@Component({
selector: 'companyselectbox',
templateUrl: './companyselectbox.component.html',
styleUrls: []
})
export class CompanySelectBoxComponent {
@Input() valueId: number;
companies: Company[];
constructor(private service: CompanyService) {
this.service.getCompanies().subscribe(companies => this.companies = companies);
}
}
Это работает, я получаю значения в поле выбора.
Теперь я могу использовать его в других компонентах, подобных этому:
<form (submit)="onFormSubmit($event)" method="post">
<dx-form #plantForm id="form" [formData]="plant" validationGroup="valgroup" labelLocation="top">
<dxi-item dataField="id" [visible]="false">
</dxi-item>
<dxi-item dataField="companyId" [label]="{text: 'Gazdasági egység'}">
<companyselectbox [valueId]="companyId"></companyselectbox>
<dxi-validation-rule type="required" message="A mező kitöltése kötelező"></dxi-validation-rule>
</dxi-item>
<dxi-item dataField="code" [label]="{text: 'Gyárkód'}">
<dxi-validation-rule type="required" message="A mező kitöltése kötelező"></dxi-validation-rule>
<dxi-validation-rule type="async" message="Ilyen nevű gyár már létezik" [validationCallback]="checkCode">
</dxi-validation-rule>
</dxi-item>
<dxi-item dataField="location" [label]="{text: 'Székhely'}">
<dxi-validation-rule type="required" message="A mező kitöltése kötelező"></dxi-validation-rule>
</dxi-item>
<dxi-item itemType="group">
<div *dxTemplate>
<div style="text-align: right">
<dx-button text="Mentés" [width]="100" type="default" stylingMode="contained"
[useSubmitBehavior]="true" style="margin-right: 5px" validationGroup="valgroup"></dx-button>
<dx-button text="Mégsem" [width]="100" type="normal" (click)="closeButtonClick()"></dx-button>
</div>
</div>
</dxi-item>
</dx-form>
</form>
Каждый импорт и т. Д. На месте, Ошибок при компиляции нет.
Найдите companyselectbox
в разметке (если бы я мог это сделать bold…no , выделенная жирным шрифтом кнопка не выделяет его жирным шрифтом). Поле выбора отображается в форме правильно, и я получаю в нем значения.
Я прикрепляю к dxi-item
обязательному dxi-validation-rule
. Если я нажму кнопку сохранения в форме и оставлю поле выбора пустым, обязательная отметка не отображается. Но если я удалю companyselectbox
компонент и заменю его разметкой в companyselectbox
компоненте, появится требуемая метка.
Итак, вопрос в том, как мне заставить проверку работать с companyselectbox
? Я бы не хотел повторять dx-select-box
компонент в каждой форме.
Комментарии:
1. Я бы не стал использовать внешнюю проверку. Скорее я бы переместил его в само поле выбора и использовал ngModel, который поддерживает онлайн-атрибут шаблона для проверки dev.to/jwp/ngmodel-internals-2m9f