我尝试使用(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。
有没有办法只映射属于类或接口的属性?
最接近的是迭代对象的键。通过某种方法过滤这个键并使用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,因此另一种方法可以禁用此控件。