如果存在“.”,您可以对 UntypedFormGroup 执行 get(<path>) 操作吗?在路径参数中?

问题描述 投票:0回答:1

我有一个 Angular 应用程序,它使用 UntypedFormGroup 来存储和检索用户的输入值。

我使用 addControl 函数将控件添加到 UntypedFormGroup,如下所示:

this.myUntypedFormGroup.addControl('mypath', new UntypedFormControl());

然后像这样检索值:

this.myUntypedFormGroup.get('mypath').value

这工作正常 - 除非我想在路径参数中使用句点。

例如,如果我希望路径是pdf文件的名称:

this.myUntypedFormGroup.addControl('myfile.pdf', new UntypedFormControl());

当我尝试检索它时,它返回空指针异常:

this.myUntypedFormGroup.get('myfile.pdf').value

我想我有点理解为什么会这样 - 它正在解释 mypdffile.pdf 中的句点来表示“pdf”应该是“myfile”的子控件,因此当它找不到子控件时它就会死掉- 名为“pdf”的控件。

是否有任何方法可以对句点字符进行转义,以便将其作为路径字符串的文字部分,而不是假设存在子控件?

非常感谢。

angular
1个回答
0
投票

为什么要用表单控件名称作为文件名,它应该定义为易于理解的内容,例如

file1
myfilePdf
之类的东西。

据我所知,您不能在 get 方法中使用

.
,因为这是表单中一种方便的方法,可以深入到表单深处的嵌套 controlName。例如:
form.get('address.line1').value


您可以编写一个进行

base64
编码并访问它的方法,但我认为这不值得付出努力。

...
export class App {
  form = new FormGroup({
    [this.controlNameAllowDots('my-file.pdf')]: new FormControl(null),
  });

  ngOnInit() {
    debugger;
    console.log(this.form.get(this.controlNameAllowDots('my-file.pdf'))!.value);
  }

  controlNameAllowDots(name: string) {
    return btoa(name);
  }
}

Stackblitz 演示

© www.soinside.com 2019 - 2024. All rights reserved.