如何将属性从角度反应形式映射到仅具有类成员属性的对象?

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

我尝试使用(Object.Assign)将反应式表单属性映射到对象类,但它添加了不属于该类或接口的额外属性,例如:

export interface MyInterface {
    a: string |null,
    b: number|null
}

当我提交表格时,我会执行以下操作:

onSubmit() {
    const mynewobject:MyInterface = Object.assign({},this.myForm.getRawValue());

    console.warn(mynewobject);
  }

但我收到的结果是:

{a: 'text', b: 1, c: 'additional property from form'}

我只想映射属性 a 和 b。

有没有办法只映射属于类或接口的属性?

angular typescript angular2-forms
1个回答
0
投票

最接近的是迭代对象的键。通过某种方法过滤这个键并使用reduce将变量分配给一个新对象。

例如

const obj:any={a:'fool',b:10,d:'other'}
const obj2=Object.keys(obj).
    filter((key) => ['a','b'].includes(key)).
    reduce((cur, key) => { return Object.assign(cur, { [key]: obj[key] })}, {});
console.log(obj2) //{a:fool,b:10}

在这种情况下,您将过滤键是否在数组 ['a',`b'] 中。如果您需要的所有属性都以某个字母开头,则可以轻松创建过滤器。

注意:请记住,formgroup.value仅提供未禁用的formControls,因此另一种方法可以禁用此控件。

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