我正在使用Angular响应式表单实现登录页面。如果表单无效,按钮“登录”将被禁用。
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'signin',
templateUrl: './signin.component.html'
})
export class SignInComponent implements OnInit {
private signInForm: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.buildForm();
}
private buildForm(): void {
this.signInForm = this.formBuilder.group({
userName: ['', [Validators.required, Validators.maxLength(50)]],
password: ['', [Validators.required, Validators.maxLength(50)]]
});
this.signInForm.valueChanges
.subscribe((data: any) => this.onValueChanged(data));
this.onValueChanged();
}
private onValueChanged(data?: any) {
console.log(data);
}
那么,当我在浏览器中启动时,我有预先填充的字段“userName”和“passwords”。并且在控制台中,我有值'{ userName:"email@email.com",password:""}', 结果按钮“登录”被禁用。但是,如果我在页面上点击某个地方,它会触发 onValueChanged ,然后我看到'{ userName:“email@email.com”,password:“123456”}', 按钮“登录”就可以使用了。
如果我进入无痕模式。我没有预填充的字段(它们是空的),但是当我填写(选择)值时,然后在控制台中我会看到'{ userName:“email@email.com”,password:“123456”}', 按钮“登录”会直接启用,而不需要任何额外的点击。
也许它们是不同的事件?自动填充和自动完成?并且angular以不同的方式处理它们吗?
解决它的最佳方法是什么?为什么只有在浏览器自动填充字段时 onValueChanged 函数才会执行一次?
autocomplete="off"
- aiven