lou*_*eck 12 html forms validation angular
App.component.html
<div class="container">
<h2>Form Validation</h2>
<form>
<div class="form-group">
<label for="prettyName">Name</label>
<input type="text" class="form-control" id="prettyName" required minlength="4" maxlength="20" [(ngModel)]="prettyName" name="prettyName" #name="ngModel">
<div *ngIf="name.errors && (name.dirty || name.touched)" class="alert alert-danger">
<div [hidden]="!name.errors.required">
Name is required
</div>
<div [hidden]="!name.errors.minlength">
Name must be at least 4 characters long
</div>
<div [hidden]="!name.errors.maxlength">
Name cannot be more than 20 characters long
</div>
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
// ... (Same things for username, email and password)Run Code Online (Sandbox Code Playgroud)
App.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
prettyName: string;
username: string;
email: string;
password: string;
}Run Code Online (Sandbox Code Playgroud)
我遵循了有关表单验证的官方文档:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#template1
有谁知道这个错误来自哪里?
干杯
Pie*_*Duc 18
您应该更改组件变量或模板#name变量.他们碰撞了:
export class AppComponent {
prettyname: string; // here
username: string;
email: string;
password: string;
}
Run Code Online (Sandbox Code Playgroud)
也改变你String的string
<form>
<div class="form-group">
<label for="prettyName">Name</label>
<input type="text" class="form-control" id="prettyName" required minlength="4" maxlength="20" [(ngModel)]="prettyName" name="prettyName" #name="ngModel">
<div *ngIf="name.errors && (name.dirty || name.touched)" class="alert alert-danger">
<div [hidden]="!name.errors.required">
Name is required
</div>
<div [hidden]="!name.errors.minlength">
Name must be at least 4 characters long
</div>
<div [hidden]="!name.errors.maxlength">
Name cannot be more than 20 characters long
</div>
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
Run Code Online (Sandbox Code Playgroud)
小智 5
当您尝试使用与现有变量相同的名称定义模板引用变量时,会发生此错误,例如在这种情况下:
@Component({
selector: 'example',
template: `
<label for="name">Name</label>
<input type="text" [(ngModel)]="name" #name="ngModel" >
`
})
export class AppComponent {
name:string;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,输入中有模板引用变量#name,我的类中有一个名为 name 的变量,当您尝试运行应用程序时,这将导致以下错误:
zone.js:355 Unhandled Promise rejection: Cannot assign to a
reference or variable! ; Zone: <root> ; Task: Promise.then ; Value:
Error: Cannot assign to a reference or variable!(…) Error: Cannot
assign to a reference or variable!
Run Code Online (Sandbox Code Playgroud)
解决方案是更改变量之一的名称。