我的表单是通过 Enter 键提交的。 textarea 的值为null,因为焦点仍在 textarea 上。
有没有办法强制模糊 textarea ,还是有更优雅的方法?
答案 0 :(得分:5)
要模糊DOM表单元素,请将本地模板变量与@ViewChild结合使用以获得" Angular wrapped"参考textarea。然后在使用nativeElement:
解包后使用渲染器进行模糊@Component({
selector: 'my-app',
template: `
<form>
<textarea #textArea [(ngModel)]="text" (keyup.enter)="submit()"></textarea>
</form>
`
})
export class AppComponent {
text = "";
constructor(private renderer:Renderer) { console.clear(); }
@ViewChild('textArea') textArea:ElementRef;
submit() {
this.renderer.invokeElementMethod(
this.textArea.nativeElement, 'blur', []);
}
}
答案 1 :(得分:1)
我假设您正在使用ngSubmit
指令提交表单。在调用表单的提交方法之前,我希望您检查表单的有效性。确保在提交之前必须具有required
属性。
<form #myForm="ngForm" (ngSubmit)="myForm.valid && submit()">
所以基本上在提交表单之前它会检查表单的有效性,如果是,则只会调用submit
方法。
修改强>
您还可以在submit
方法中检查角度组件的表单有效性。
<强> HTML 强>
<form #myForm="ngForm" (ngSubmit)="&& submit()">
<强>组件强>
submit(){
if(this.myForm.valid){
console.log('MyForm is valid');
//do make ajax or call action to submit data to server
}
else {
//here form is invalid
console.log('MyForm is valid');
}
}
答案 2 :(得分:0)
在提交前,您可以在此处执行3项操作验证 -
1)在组件中创建一个函数,用于验证textarea并在提交函数中调用它。 像这样 -
onSubmit(){
isTextAreaValid = this.validateTextArea();
if(isTextAreaValid){
//submit the data
}
}
2)或者创建一个名为&#39; isTextAreaValid&#39;检查,像这样 -
<form *ngIf="active" (ngSubmit)="onSubmit() && isTextAreaValid" #heroForm="ngForm">
3)或者就这样做 -
<form #heroForm="ngForm" (ngSubmit)="heroForm.form.valid && onSubmit()">