2017-02-24 39 views
3

App.component.html 角2表单验证错误“未处理承诺拒绝:不能分配给一个或引用变量!”

<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)

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; 
 
}

我按照有关表单验证的官方文档:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#template1

有谁知道这个错误来自哪里?

干杯

+0

'name.error'这不能被作为'name'是一个字符串访问。将输入/表单ID从“name”更改为其他任何内容 –

+0

更改我的输入表单的ID尚未解决错误,您的意思是: ? – louisdeck

+0

你都修改了吗?你应该改变他们 –

回答

9

你应该要么改变你的组件变量,或者你的模板#name变量。他们碰撞:

export class AppComponent { 
    prettyname: string; // here 
    username: string; 
    email: string; 
    password: string; 
} 

也能改变你Stringstring

<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> 

+0

感谢您的答复,我已经改变了代码,你告诉我,没有解决错误,虽然, 你能不能检查,如果我做了什么你的意思吗? – louisdeck

+0

你已经改变了太多..我更新了我的答案,你不应该改变'#名字'和templ吃变量寻址这个变量 – PierreDuc

+0

谢谢,它正在工作。 有一个好的一天 – louisdeck

0

出现此错误当您尝试定义与现有变量的名称相同的模板参考变量,像例如在这种情况下:

@Component({ 
    selector: 'example', 
    template: ` 
     <label for="name">Name</label> 
     <input type="text" [(ngModel)]="name" #name="ngModel" > 
     ` 
    }) 
    export class AppComponent { 
    name:string; 

} 

正如你所看到的,有一个在输入模板参考变量#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! 

解决方法是更改​​其中一个变量的名称。

相关问题