我的模型具有自定义属性类型TimeSpan
。我想使用[form]
在kendo-timepicker
中对其进行编辑,但需要Date
个对象。
有没有办法可以创建一个指令来拦截控件和底层的ngControl,以便我可以在TimeSpan
和Date
之间进行转换?
我宁愿不必创建一个看起来与模型相同但具有不同属性类型的新类。
答案 0 :(得分:0)
我这样做的方法是在保存映射表单的地方添加一个额外的变量。所以像这样:
mappedForm={};
constructor(....){...}
ngOnInit() {
this.myForm.valueChanges.subscribe(form => {
form.property = parseInt(form.property, null);
this.mappedForm = form;
})
}
在这种情况下,我将字符串映射到数字,但您可以使用' as'用于映射更复杂数据结构的关键字。另外,根据您的情况,您可以使用map并使用正确的值来观察,而不是像我一样订阅。另请注意,mappedForm只是表单值的快照,不包含其他属性。
编辑如果您想重新更新表单控件
如果要重置表单控件值,可能需要使用辅助布尔值,这样就不会陷入无限循环。
ngOnInit() {
let isFirst = false;
this.myForm.valueChanges.subscribe(form => {
form.prop = parseInt(form.prop , null);//replace with you mapping
if (isFirst) {
this.myForm.patchValue(form);
isFirst = !isFirst;
}
})
}