gpt4 book ai didi

模板驱动表单的 Angular 条件验证

转载 作者:太空狗 更新时间:2023-10-29 17:32:49 25 4
gpt4 key购买 nike

我有一个只有在设置了另一个值时才需要的输入字段。另一个值来自一个选择。请注意,我的实际表格要复杂得多,但这里有一个示例显示与此问题相关的部分:

模板:

<form name="createPaymentForm" (ngSubmit)="f.form.valid && createPayment()" #f="ngForm" novalidate>

<select name="orderNumberType" #orderNumberType="ngModel"
[(ngModel)]="payment.orderNumberType">
<option [ngValue]="undefined" disabled>Select</option>
<option *ngFor="let opt of paymentIdOptions" [value]="opt.id">{{opt.label}}</option>
</select>

<div [ngClass]="{ 'has-error': f.submitted && !orderNumber.valid }">
<input type="text" name="orderNumber"
[(ngModel)]="payment.orderNumber" #orderNumber="ngModel">
</div>

</form>

组件:

import { Component, OnInit } from '@angular/core';
import { PaymentsService } from '../../../services/payments.service';
import { Payment } from '../../../models';

@Component({
selector: 'app-new-payment',
templateUrl: './new-payment.component.html',
styleUrls: ['./new-payment.component.scss']
})
export class NewPaymentComponent implements OnInit {
paymentIdOptions: any = [];
payment: Payment = {};

constructor( private paymentsService: PaymentsService ) { }

ngOnInit() {
this.paymentsService.getOrderNumberTypes().subscribe(orderNumberTypes => {
this.paymentIdOptions = orderNumberTypes;
});
}

createPayment() {
console.log(this.payment);
//do something...
}
}

我的目标是仅在 orderNumberType 设置为“未定义”以外的任何值时才需要 orderNumber。实现这一点的最简单方法是什么?

(注意,Angular 5)

最佳答案

可以使用 必需的 Angular 指令 来完成,例如 [required]="payment.orderNumberType"(他检查 payment.orderNumberType 是否为 undefined、null、0、假或空字符串)。这是 [attr.required]="payment.orderNumberType ? true : undefined" 的简写。

你对 [ngClass]="{ 'has-error': f.submitted && !orderNumber.valid }"有疑问,因为 valid 将在“ngAfterViewChecked”期间设置,所以 Angular 不想再次完成这项工作。将其替换为 [class.has-error]="f.submitted && !orderNumber.valid" 不会再让它哭了。

关于模板驱动表单的 Angular 条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com