Angular2 表单form

经福
2023-12-01

angular2的表单主要用到了ngForm,ngModel,ngSubmit

ngSubmit对应的函数是我们提交表单调用的函数

angular2通过ngForm将按钮的禁用/启用状态和表单的有效性关联起来

#loginForm、#username和#userpwd都是angular2中的模板引用变量;

#username和#userpwd可以监控input输入框的状态,#loginForm可以用来监控表单的状态,通过这些状态可以进行输入错误提示以及表单提交控制。

HTML控件(比如input、select等)的状态主要包括:

pristinedirty:控件是否使用过,或者理解成是否输入过内容

invalidvalid:控件输入是否有效

toucheduntouched:控件是否已经被访问过

loginForm.form.valid用来判断form表单中的控件是否全部有效,

<form #loginForm="ngForm" (ngSubmit)="login(user)">
    <div class="form-group">
        <span>姓名</span>
        <input type="text" name="username" #username="ngModel" [(ngModel)]="user.name" required pattern="^[a-zA-Z][a-zA-Z0-9]*"  minlength="6" maxlength="16"/>
        <span *ngIf="!username.pristine&&username.invalid||username.touched&&username.invalid">用户名由英文字母和数字组成的6-16位字符,以字母开头</span>
    </div>
    <div class="form-group">
        <span>密码</span>
        <input type="password" name="userpwd" #userpwd="ngModel" [(ngModel)]="user.pwd" required minlength="6"/>
        <span *ngIf="!userpwd.pristine&&userpwd.invalid||userpwd.touched&&userpwd.invalid">密码至少6个字符</span>
    </div>
    <button type="submit"  [disabled]="!loginForm.form.valid">登陆</button>
</form>

在表单中需要注意的事项

1.在ng2表单中使用ngModel需要注意,必须带有name属性或者使用 [ngModelOptions]=”{standalone: true}”,二选其一

<form #testform="ngform">
    <input name="username" [(ngModel)]=user.name />
</form> 

<form #testform="ngform">
    <input [ngModelOptions]="{standalone: true}" [(ngModel)]=user.name />
</form>

如果未设置name或者ngModelOptions,就会报如下错误:

If ngModel is used within a form tag, either the name attribute must be set or the formcontrol must be defined as ‘standalone’ in ngModelOptions.

因为ngForm持有通过ngModel指令和name属性为各个元素创建的那些控件,并且监视它们的属性变化,包括有效性。 它还有自己的valid属性,只有当其中所有控件都有效时,它才有效。

2.使用button时需要注明type类型,未注明类型的button会默认为submit,当你点击一个非提交表单按钮时也会提交表单,所以要注明type=”button”

 类似资料: