【发布时间】:2018-01-31 13:41:42
【问题描述】:
我正在使用响应式表单,我有两种表单登录和注册。 注册:
<div class="registration_wrap">
<div class="registration">
<form [formGroup]="form"
novalidate>
<h2>Registration</h2>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Username"
name="username"
[formControlName]="'username'">
<mat-error *ngIf="form.controls['username'].invalid">{{
getErrorMessage('username') }}</mat-error>
</mat-form-field>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Email"
name="email"
[formControlName]="'email'">
<mat-error *ngIf="form.controls['email'].invalid">{{
getErrorMessage('email') }}</mat-error>
</mat-form-field>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Enter your password"
[type]="hide ? 'password' : 'text'"
name="password"
[formControlName]="'password'">
<mat-icon matSuffix
(click)="hide = !hide"
class="eye">
{{hide ? 'visibility' : 'visibility_off'}}
</mat-icon>
<mat-error *ngIf="form.controls['password'].invalid">{{
getErrorMessage('password') }}</mat-error>
</mat-form-field>
<ng2-password-strength-bar
[passwordToCheck]="form.controls['password'].value"
[barLabel]="barLabel"
[barColors]="myColors">
</ng2-password-strength-bar>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Duplicate password"
[type]="hide1 ? 'password' : 'text'"
name="duplicate"
[formControlName]="'duplicate'">
<mat-icon matSuffix
(click)="hide1 = !hide1"
class="eye">
{{hide1 ? 'visibility' : 'visibility_off'}}
</mat-icon>
<mat-error *ngIf="form.controls['duplicate'].invalid">{{
getErrorMessage('duplicate') }}</mat-error>
</mat-form-field>
<mat-checkbox
[formControlName]="'checkbox'"
>Check me!
</mat-checkbox>
<div class="but_wrap">
<button mat-fab color="primary"
(click)="onSubmit(form)"
[disabled]="form.invalid">
<mat-icon>done</mat-icon>
</button>
<button mat-fab color="accent"
[routerLink]="'/login'">
<mat-icon>reply</mat-icon>
</button>
</div>
<!--<p>Form value: {{ form.value | json }}</p>-->
<!--<p>Form status: {{ form.status | json }}</p>-->
</form>
</div>
</div>
登录:
<div class="login_wrap">
<div class="login">
<form [formGroup]="form"
novalidate>
<h2>Login</h2>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Username"
name="username"
[formControlName]="'username'">
<mat-error *ngIf="form.controls['username'].invalid">{{
getErrorMessage('username') }}</mat-error>
</mat-form-field>
<mat-form-field class="example-full-width">
<input matInput
placeholder="Enter your password"
[type]="hide ? 'password' : 'text'"
name="password"
[formControlName]="'password'">
<mat-icon matSuffix
(click)="hide = !hide"
class="eye">
{{hide ? 'visibility' : 'visibility_off'}}
</mat-icon>
<mat-error *ngIf="form.controls['password'].invalid">{{
getErrorMessage('password') }}</mat-error>
</mat-form-field>
<div class="but_wrap">
<button mat-fab color="primary"
(click)="onSubmit(form)"
[disabled]="form.invalid">
<mat-icon>keyboard_backspace</mat-icon>
</button>
<button mat-fab color="accent"
[routerLink]="'/registration'">
<mat-icon>group</mat-icon>
</button>
</div>
<!--<p>Form value: {{ form.value | json }}</p>-->
<!--<p>Form status: {{ form.status | json }}</p>-->
</form>
</div>
</div>
如您所见,两种形式都有重复的代码
<mat-form-field class="example-full-width">
<input matInput
placeholder="Username"
name="username"
[formControlName]="'username'">
<mat-error *ngIf="form.controls['username'].invalid">{{
getErrorMessage('username') }}</mat-error>
</mat-form-field>
我想知道我是否可以使用组件或其他东西来放置此代码并将其返回到我的 HTML 模板中。我知道我可以使用简单的组件来做到这一点,但我使用的是响应式表单。还是我应该保持原样?谢谢!
【问题讨论】:
标签: angular forms angular-material2 reactive