这是我的第一个有角度的项目,我正在使用内置服务器进行卡车运输,并偶尔进行构建以推送到服务器 - 现在我正在尝试--prod构建......我得到了编译错误。
通过阅读,我已经设法解决了大部分问题,并且我理解AOT的需求,但是这个错误让我感到困惑
我通过应用程序重复使用此代码来启动表单,
<form novalidate="novalidate"
autocomplete="off"
[formGroup]="form"
(submit)="form.valid && submitForm()" >
但是我得到的一些模板
x.component.html(6,3): : Expected 1 arguments, but got 0.
第6行是:(提交)=“form.valid&amp;&amp; submitForm()”&gt;
====== 注意:我已将代码缩减为裸骨
and included it here, so you see EXACTLY what is there...
no extrapolating or generalizing.
Builds fine in dev mode
我仍然得到相同的错误 - user-form.component.html(6,4):预期1个参数,但得到0。
所以我想我会给出完整的组件和模板。
component.ts
import { Component, OnInit, EventEmitter, Output } from '@angular/core';
import { FormBuilder, FormGroup, FormControl, NgForm, NgControl, Validators } from '@angular/forms';
import { AbstractControl } from '@angular/forms/src/model';
import { ValidationErrors } from '@angular/forms/src/directives/validators';
import { get } from 'lodash';
@Component({
selector: 'user-form',
templateUrl: './user-form.component.html',
})
export class UserFormComponent implements OnInit {
form: FormGroup;
loading = false;
submitAttempted = false;
constructor(
) { }
get formDisabled () {
return this.loading === true;
}
get xStatus () {
const field = this.form.get('x');
if (!field.touched) {
return '';
}
if (field.errors && field.errors.required) {
return 'This field is required';
}
}
get formModel () {
return {
x: this.form.get('x').value
}
}
ngOnInit() {
this.form = new FormGroup({
x: new FormControl(
{
value: 'x',
disabled: this.formDisabled,
},
[
Validators.required
]
)
})
}
resetForm () {
this.form.get('x').markAsUntouched();
this.submitAttempted = false;
}
submitForm(form: NgForm) {
console.log( this.form );
}
showError (fieldName: string) {
const field = this.form.get(fieldName);
return field.invalid && (field.touched || this.submitAttempted);
}
}
template.ts (user-form.component.html)
<form
novalidate="novalidate"
autocomplete="off"
[formGroup]="form"
(ngSubmit)="submitForm()" >
<label class="input" [class.state-error]="showError('x')">
<input type="text" name="x" placeholder="x" formControlName="x" />
<div *ngIf="xStatus" [innerHTML]="xStatus | safeHtml"></div>
</label>
<button type="submit" class="btn btn-primary" (click)="submitAttempted = true">
<i *ngIf="loading" class='fa fa-spinner fa-spin '></i>
{{ loading ? 'Saving' : 'Add x' }}
</button>
</form>
答案 0 :(得分:2)
您收到该错误,因为在您的表单类中,submitForm需要将表单作为参数,但在模板中您没有传递表单。
意见解决方案:不要这样做。只需使用submitForm()来触发表单上的验证。没有理由将表单实例交给自己。
答案 1 :(得分:0)
改为(submit)="submitForm()"
。您可以在form.valid
功能中查看submitForm
。
答案 2 :(得分:0)
从您的组件代码中删除
submitForm(form: NgForm) { }
这样传递的参数不是必需的,因为您已经将表单与组件和模板链接了。这需要您在模板中也传递参数。但是将其从组件中删除将可以100%工作
答案 3 :(得分:0)
就我而言
<form #f="ngForm" id="someForm" name="form" (ngSubmit)="f.form.valid && buyTicket(ticket)" novalidate>
产生了错误
ERROR in src\app\event\event.component.html(23,54): : Expected 0 arguments, but got 1.
这意味着.ts
中的文件必须是越野车功能,没有参数-buyTicket()
。
我的意思是不仅表单实例会产生此错误,而且它也可能是任何越野车功能。
答案 4 :(得分:-1)
To Submit a form you need to use ngSubmit on the form, and to enable/disable the submit button in the form, we can check like this: form.valid and bind this to the button disabled attribute.
Something like this:
<form [formGroup]="form" (ngSubmit)="submitForm()">
<button type="submit" [disabled]='!form.valid'>Submit</button>
</form>