angular - 重置模板驱动表单/表单的对象打字稿Angular 6时的问题
问题描述
我有一个带有模板驱动表单的组件,我有一个对象 myObj,它从表单的字段中获取值。该组件看起来像:
export class a {
myObj:any;
..
..
initiateObj():void {
this.myObj = {
x:"",
y:"",
z:[],
xy: []
};
}
..
..
reset():void {
this.initiateObj();
}
ngOnInit() {
this.initiateObj();
}
视图看起来像:
<form #myForm="ngForm">
<input ... [(ngModel)]="myObj.x" #myInput="ngModel" />
<input ... [(ngModel)]="myObj.y" #myInput1="ngModel" />
<select ... [(ngModel)]="myObj.z">
</select>
..
..
<button .... (click)="submit()">
<button .... (click)="reset()">
</form>
当组件启动时 myObj 的控制台中的值是:
X:” ”,
y:“”,
z:[],
等等
但是,当我填写表格时 - 即使我没有填写表格,只需单击重置按钮,控制台中 myObj 的值将是:
x:空,
y:空,
z:[空]
..
myObj
当我需要再次使用时(当我需要再次使用表单时)会导致错误。
当组件第一次启动时,这些值是 Ok。但是一旦我单击重置按钮,这些值就会变为空。
我尝试在视图中使用单向绑定 -[ngModel]
而不是[(ngModel)]
,然后当我单击重置时它是好的,但随后myObj
不会从表单中获取值 - 因为它是单向绑定。所以我必须使用两种方式绑定。但是当我点击重置时,对象的值变为空。
我之前在这里问过,我得到的答案是这样声明课程:
export class initiateObj {
x: '';
y: '';
z: [];
xy: string;
constructor(options: any = {}) {
this.x = options.x || null;
this.y = options.y || null;
this.z = options.z || null;
this.xy = options.xy || null;
}
}
reset(): void {
this.myObj = new initiateObj();
}
ngOnInit(): void {
this.myObj = new initiateObj();
}
但是这个解决方案也没有奏效。单击重置后,我仍然得到同样的东西。
然后我尝试viewchild
使用内置reset
方法 - 但它也没有用。尽管如此,一旦提交并再次重置 - 值变为null
然后我在控制台中意识到,如果我登录到控制台myObj
,然后单击重置并获取null
值后,它还会在控制台中的对象上附加另一条消息:
“下面的值刚刚被评估”
所以似乎一旦我点击重置我得到了想要的值,但它会立即改变为这些null
值?可能吗?
如果是的话 - 那么解决这个问题的方法是什么?
我也尝试viewchild
访问每个表单的字段并给它 "" 或 [] ,但我仍然得到null
我该如何解决?(所以我可以在组件中多次提交和重置表单,而无需重新加载页面?)
谢谢!
解决方案
undefined || null
将返回 null。如果您没有将任何参数值传递给您的构造函数,options.x
,options.y
和options.z
在options.xy
构造函数内将是undefined
. 将您的构造函数更改为:
constructor(options: any = {}) {
this.x = options.x || '';
this.y = options.y || '';
this.z = options.z || '';
this.xy = options.xy || [];
}
那么它应该工作
推荐阅读
- swift - 如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?
- c# - 是否可以在 C# 的 switch case 语句中检查空值
- javascript - 如何清理 URL 中的所有 Unicode 字符
- c# - 在两个用户控件和主窗体之间传递一个对象
- javascript - 如何从 woocommerce 计费国家/地区下拉更改中更改 intlTelInput 国家/地区
- docker - docker 镜像内的病毒扫描
- c++17 - 如何在 Visual Studio 2019 上修复 E0325
- python - 由于“https”,Google Drive API 无法在 Celery 任务中工作,ServerNotFoundError
- docker - 如何从 docker 访问网络共享文件夹
- next.js - NEXT-PWA 崩溃