2017-01-22 4 views
0

私はanguar 2の次のテンプレート駆動型を使用して簡単な検証フォームを作成しようとしています。角2電子メールが有効かどうかを確認してください

error_handler.js:54 EXCEPTION:./LoginComponentクラスLoginComponentでのエラー - インラインテンプレート:4:によって引き起こさ32:未定義

のプロパティを読み取ることができません '有効' 私はエラーが来ていると信じてから!email.vaid。しかし、なぜ私は理解していない。あなたはモデルオブジェクト.Doesモデルオブジェクトの電子メールプロパティにアクセスしている

<div class="col-md-6 col-md-offset-3"> 
    <h2>Login</h2> 
    <form name="form" (ngSubmit)="f.form.valid && login()" #f="ngForm" novalidate> 

     <div class="form-group" [ngClass]="{ 'has-error': f.submitted && !email.valid }"> 
      <label for="email">Email</label> 
      <input type="email" class="form-control" name="email" [(ngModel)]="model.email" #email="ngModel" required /> 
      <div *ngIf="f.submitted && !email.valid" class="help-block">Email is required</div> 
     </div> 

     <div class="form-group" [ngClass]="{ 'has-error': f.submitted && !password.valid }"> 
      <label for="password">Password</label> 
      <input type="password" class="form-control" name="password" [(ngModel)]="model.password" #password="ngModel" required /> 
      <div *ngIf="f.submitted && !password.valid" class="help-block">Password is required</div> 
     </div> 
    </form> 
</div> 
+0

すべてが大丈夫そうです!あなたは '* ngIf'を' [hidden] 'で置き換えて私に教えてください。 – micronyks

答えて

1
<input type="email" class="form-control" name="email"  [(ngModel)]="model.email" #email="ngModel" required /> 

は、あなたのクラスに存在しますか?カランガーグは、電子メールが定義されていないように見え、示唆したように このコード

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div class="col-md-6 col-md-offset-3"> 
    <h2>Login</h2> 
    <form name="form" (ngSubmit)="f.form.valid && login()" #f="ngForm" novalidate> 

     <div class="form-group" [ngClass]="{ 'has-error': f.submitted && !email.valid }"> 
      <label for="email">Email</label> 
      <input type="email" class="form-control" name="email" [(ngModel)]="user.email" #email="ngModel" required /> 
      <div *ngIf="!email.valid" class="help-block">Email is required</div> 
     </div> 

    </form> 
    </div> 
     `, 
    }) 
    export class App { 
    name:string; 
    user:any = { 
     email:'test' 
    } 
+0

私は実際のコンポーネントに名前やユーザーの電子メールを持っていません。なぜなら、テンプレート駆動フォームはテンプレートに含まれているので、コンポーネントへの参照は必要ないという印象を受けていたからです。しかし、私はmodel:any = {};を持っています。フォームの結果にアクセスできるようにするだけです。 私はすべてが失敗したと思った&&!email.valid。これは、 "電子メール"が入力の低いレベルで宣言されているため、この "電子メール"にアクセスできないためですか? – user172902

+1

今問題は、コンポーネントのモデルオブジェクトをanyとして定義していることにあります。カスタムタイプのインターフェイスを定義し、モデルにthaatタイプを割り当てて、モデルオブジェクトに電子メールプロパティが存在するようにする必要があります。それは常に未定義です。このplunkr [リンク] https://plnkr.co/edit/W6cxKp8azRT8Lg1L8uVj?p=preview @ user172902 –

1

を試してみてください。 Angular 2のテンプレートは、値が定義されているかどうかを確認するための構文を、セーフ・ナビゲーション・オペレータ(?)といいます。

*ngIf="!email?.valid" 

これはやって次のようになります

*ngIf="email && !email.valid" 

さらに詳しい情報: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#safe-navigation-operator

関連する問題