angular - 添加了未显示的 ng-select 响应式(Reactive)表单验证消息

标签 angular angular-ngselect

我向 ng-select 组件添加了一条错误消息,以在它变脏且未选择值时显示错误消息。但是错误消息没有显示。但验证有效。

https://ng-select.github.io/ng-select/

<form [formGroup]="itemForm" (ngSubmit)=onSubmitForm()>
    <div class="form-group col">
        <label for="pack_size">Supplier</label>
        <ng-select 
            bindLabel="supplier" 
            placeholder="Select Supplier" 
            formControlName="supplier"
            [ngClass]="{ 'is-invalid': supplier.invalid && supplier.touched }" 
            >
            <ng-option *ngFor="let supplier of suppliers" [value]="supplier.id">
                {{supplier.description}}
            </ng-option>
        </ng-select>
        <div *ngIf="supplier.invalid && supplier.touched" class="invalid-feedback">
            <div *ngIf="!!supplier.errors.required">Supplier is required</div>
        </div>
    </div>
    </div>
    <button class="btn btn-primary" type="submit"
                            [disabled]="itemForm.invalid">Add</button>
</form>

已添加的 CSS 类

ng-select.ng-invalid.ng-touched .ng-select-container {
    border-color: #dc3545;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px #fde6e8;
}

根据要求为表单函数创建 ts 文件

itemForm: FormGroup;

constructor(
    private _fb: FormBuilder,
) {}

ngOnInit() {
    this.submitted = false;
    this.buttonValue = 'Add';
    this.loadOthers();
    this.itemsLoad();
    this.itemForm = this._fb.group({
        id: [null],
        name: [null, Validators.required],
        pack_type: [null, Validators.required],
        pack_size: [null, Validators.required],
        supplier: [null, Validators.required],
        item_category: [null, Validators.required],
    });
}


get id() {
    return this.itemForm.get('id');
}

get name() {
    return this.itemForm.get('name');
}

get pack_type() {
    return this.itemForm.get('pack_type');
}

get pack_size() {
    return this.itemForm.get('pack_size');
}

get supplier() {
    return this.itemForm.get('supplier');
}

get item_category() {
    return this.itemForm.get('item_category');
}

最佳答案

请像这样尝试

<form [formGroup]="itemForm" (ngSubmit)=onSubmitForm()>
    <div class="form-group col">
        <label for="pack_size">Supplier</label>
        <ng-select 
            bindLabel="supplier" 
            placeholder="Select Supplier" 
            formControlName="supplier"
            [ngClass]="{ 'is-invalid': itemForm.get('supplier').invalid && itemForm.get('supplier').touched }" 
            >
            <ng-option *ngFor="let supplier of suppliers" [value]="supplier.id">
                {{supplier.description}}
            </ng-option>
        </ng-select>
        <div *ngIf="itemForm.get('supplier').invalid && itemForm.get('supplier').touched" class="invalid-feedback">
            <div *ngIf="!!itemForm.get('supplier').hasError('required')">Supplier is required</div>
        </div>
    </div>
    </div>
    <button class="btn btn-primary" type="submit"
                            [disabled]="itemForm.invalid">Add</button>
</form>

您需要将供应商更改为itemForm.get('supplier')

我不确定,但我认为您也需要更改类(class)。

关于angular - 添加了未显示的 ng-select 响应式(Reactive)表单验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59091313/

相关文章:

javascript - Keycloak - 如何禁用两个(Angular)客户端应用程序之间的共享 session ?

javascript - 如何检测有多少 Rest 项目可用

html - 为什么这个 xpath 找不到所需的元素?

angular - 如何使 vis.js 库与 Angular2 一起工作?

Angular ng-select - bindValue 不起作用并且仍然绑定(bind)到整个对象

angular - typescript 错误 TS1005 : '=' expected

angular - 带有表单控件的 ng-select 需要验证 angular 7

angular - 禁用 Angular ng-select 窗口

Angular 6 - 无法在特定函数内运行外部函数

ngx-translate - 在 Angular 5 应用程序中使用 ngx-translate 和 ng2-select