angular - 仅当表单有效时,角度表单才获取字段值
问题描述
我正在使用角度形式并在其字段中进行了一些验证。现在,我想在字段更改时获取字段的值,但前提是表单处于有效状态。
<form [formGroup]="AddEditform" novalidate autocomplete="off">
<mat-form-field appearance="outline">
<textarea matInput name="user" formControlName="users" id="user">
</textarea>
<mat-error
*ngIf="!AddEditform.valid && AddEditform.get('users').hasError('maxlength')"
>
Exceeded maximum length
</mat-error>
</<mat-form-field>
</form>
AddEditform: FormGroup;
constructor(
private fb: FormBuilder,
) { }
ngOnInit() {
this.AddEditform = this.fb.group({
users: [
'',
[
Validators.maxLength(100)
],
],
});
this.AddEditform.get('users').valueChanges.subscribe(data => {
if (this.AddEditform.valid) {
console.log(data);
}
});
}
目前,在第一次违规发生之前,值会被打印出来。在这种情况下,直到第 101 个字符。之后我没有得到任何价值。但为什么我会得到第一个违规值?
解决方案
查看源代码updateValueAndValidity
,我的猜测是valueChanges
子窗体控件的事件发生在其父控件更新之前。
尝试保留用户控件的引用并检查其自己的valid
标志,而不是父级的标志。
ngOnInit() {
this.UsersControl = this.fb.control('', [Validators.maxLength(100)]);
this.AddEditform = this.fb.group({
users: this.UsersControl
});
this.UsersControl.valueChanges.subscribe(data => {
if (this.UsersControl.valid) {
console.log(data);
}
});
}
要么,要么订阅整个表单valueChanges
事件。
ngOnInit() {
this.AddEditform = this.fb.group({
users: ['', [Validators.maxLength(100)]]
});
this.AddEditForm.valueChanges.subscribe(data => {
if (this.AddEditForm.valid) {
console.log(data['users']);
}
});
}
推荐阅读
- python-3.x - 我想安排具有特定条件的字符串列表
- python - 尝试在类中构建功能性 api 模型,但出现错误“AttributeError: 'Model' object has no attribute 'shape'”
- grafana - influxdb 中的时间间隔与电报配置中设置的时间间隔不匹配
- javascript - 使用 Apollo 客户端时未将 GraphQL 突变发送到请求?
- automated-tests - 让 TestCafe 识别 dotenv 变量
- sql-server - Azure SQL Server 上是否有一种日志来检查某些函数何时创建/删除?
- c - 如何使用 C 在 Windows 和 Linux 上模拟单击?
- python - 正则表达式:查找字母 numeirc 子字符串,但不严格按字母顺序排列,可能是完全数字
- javascript - this.$set 更新数组不起作用(VueJS)
- javascript - 在节点 js 中导入默认值