如何告诉 Angular 从 DOM 获取输入值?

How to tell Angular to get an input value from the DOM?

提问人:Fractaliste 提问时间:10/19/2023 更新时间:10/20/2023 访问量:36

问:

我的工作的 SSO 以与我需要修复的 Angular 表单不兼容的方式填写我的登录表单。

问题是用户看到的表单是由 SSO 填写的:

enter image description here

Angular 的表单看不到任何值(上面屏幕截图的顶行),而如果我直接请求 DOM,则输入会提供得很好(我得到了以下带有断点的快照):

enter image description here

我不知道 SSO 在内部是如何工作的,有没有办法告诉 Angular 表单从 DOM 获得真正的价值?

表格是这样写的:

<form [formGroup]="form" (ngSubmit)="onSubmit()">
  <mat-input-container>
    <input matInput name="userName" type="name" placeholder="User" formControlName="userName" required />
    ...
角度 圆顶

评论


答:

-1赞 Natan 10/20/2023 #1

也许这会有所帮助:模板参考

0赞 Eliseo 10/20/2023 #2

我没有 SSO,所以我建议你试试:

  1. 在自己的声明中创建表单,而不是 ngOnInit

    form=new FormGroup({
       userName:new FormControl('',Validators.required)
       ...
    })
    
  2. 您也可以尝试使用 ngModel 为 formsControl 赋值 而不是直接使用 formControlName

    <input matInput name="userName" type="name" placeholder="User" 
          [ngModel]="form.controls.userName.value"
          (ngModelChange)="form.controls.userName.setValue($event)"
          [ngModelOptions]="{standalone:true}">
    required />
    
  3. 实际上,您始终可以使用 setValue 为表单赋予值,但是 真的我不知道在哪里用。如果我想象在一个(焦点)事件中,甚至包含在 setTimeout 中

    focus()
    {
      setTimeout(() => {
        const form: any = document.getElementsByTagName('form')[0];
        Object.keys(this.form.value).forEach((key: string) => {
          const value: string = form.elements[key].value || '';
          this.form.get(key)?.value != value &&
          this.form.get(key)?.setValue(value);
        });
      })
    }
    

但真的我无法检查它是否有效

带有第三种选择的 StackBlitz