2017-02-12 5 views
0

* ngIf構造指示文を使用して入力フィールドを条件付きで使用できるようにする場合はいつでも、は、入力フィールドで* ngIfを使用できません

<form> 
    <input *ngIf='true' #inputName [(ngModel)]='log' name='ex1'/> 
    <button (click)='logMe(inputName.value)'>Click</button> 
</form> 

ここで、inputNameは未定義であり、エラーを表示します。 このplunkrで再現されたエラー:here

* ngIfの条件が真であるため、なぜこのエラーが発生するのかわかりません。つまり、入力フィールドのDOM要素が作成され、入力フィールドに何かを入力すると、モデルが更新されているのがわかります。しかし、投げられたエラーは、あたかも入力フィールドが存在しないかのように示唆しています。

スタックトレース:

EXCEPTION: Error in ./App class App - inline template:3:2 caused by: Cannot read property 'value' of undefined 
ErrorHandler.handleError @ core.umd.js:3064 
next @ core.umd.js:8041 
schedulerFn @ core.umd.js:3689 
SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238 
SafeSubscriber.next @ Subscriber.ts:190 
Subscriber._next @ Subscriber.ts:135 
Subscriber.next @ Subscriber.ts:95 
Subject.next @ Subject.ts:61 
EventEmitter.emit @ core.umd.js:3675 
NgZone.triggerError @ core.umd.js:4040 
onHandleError @ core.umd.js:4001 
ZoneDelegate.handleError @ zone.js:246 
Zone.runTask @ zone.js:154 
ZoneTask.invoke @ zone.js:345 
core.umd.js:3066 ORIGINAL EXCEPTION: Cannot read property 'value' of undefined 
ErrorHandler.handleError @ core.umd.js:3066 
next @ core.umd.js:8041 
schedulerFn @ core.umd.js:3689 
SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238 
SafeSubscriber.next @ Subscriber.ts:190 
Subscriber._next @ Subscriber.ts:135 
Subscriber.next @ Subscriber.ts:95 
Subject.next @ Subject.ts:61 
EventEmitter.emit @ core.umd.js:3675 
NgZone.triggerError @ core.umd.js:4040 
onHandleError @ core.umd.js:4001 
ZoneDelegate.handleError @ zone.js:246 
Zone.runTask @ zone.js:154 
ZoneTask.invoke @ zone.js:345 
core.umd.js:3069 ORIGINAL STACKTRACE: 
ErrorHandler.handleError @ core.umd.js:3069 
next @ core.umd.js:8041 
schedulerFn @ core.umd.js:3689 
SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238 
SafeSubscriber.next @ Subscriber.ts:190 
Subscriber._next @ Subscriber.ts:135 
Subscriber.next @ Subscriber.ts:95 
Subject.next @ Subject.ts:61 
EventEmitter.emit @ core.umd.js:3675 
NgZone.triggerError @ core.umd.js:4040 
onHandleError @ core.umd.js:4001 
ZoneDelegate.handleError @ zone.js:246 
Zone.runTask @ zone.js:154 
ZoneTask.invoke @ zone.js:345 
core.umd.js:3070 TypeError: Cannot read property 'value' of undefined 
    at CompiledTemplate.proxyViewClass.View_App0.handleEvent_5 (VM5226 component.ngfactory.js:189) 
    at CompiledTemplate.proxyViewClass.eval (core.umd.js:12399) 
    at HTMLButtonElement.eval (platform-browser.umd.js:3224) 
    at ZoneDelegate.invokeTask (zone.js:275) 
    at Object.onInvokeTask (core.umd.js:3971) 
    at ZoneDelegate.invokeTask (zone.js:274) 
    at Zone.runTask (zone.js:151) 
    at HTMLButtonElement.ZoneTask.invoke (zone.js:345) 
ErrorHandler.handleError @ core.umd.js:3070 
next @ core.umd.js:8041 
schedulerFn @ core.umd.js:3689 
SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238 
SafeSubscriber.next @ Subscriber.ts:190 
Subscriber._next @ Subscriber.ts:135 
Subscriber.next @ Subscriber.ts:95 
Subject.next @ Subject.ts:61 
EventEmitter.emit @ core.umd.js:3675 
NgZone.triggerError @ core.umd.js:4040 
onHandleError @ core.umd.js:4001 
ZoneDelegate.handleError @ zone.js:246 
Zone.runTask @ zone.js:154 
ZoneTask.invoke @ zone.js:345 
core.umd.js:3073 ERROR CONTEXT: 
+0

私は本当にあなたがここで何をしたいか何を得ることはありません。ボタンをクリックした後、入力を "名前"で埋めるとしますか? –

+0

フォーム内で入力フィールドを動的に挿入/削除しようとしたときのエラーの再作成に過ぎませんでした。コントロールが未定義のエラーをスローしていても、モデルが更新されたことを示すためにクリックボタンがあります。 –

+0

@GünterZöchbauer私は興味があります。なぜなら '* ngIf'は' inputName'を一緒に使用すると未定義にする??私はあなたが知っているかもしれないと思っていた...よく...あなたはすべてを知っている:D:D私は自分でドキュメントを掘り下げようとしたが、役に立たなかった。あなたが* ngIfを削除した場合、OP procidedコードは完全に機能しています。理由と理由を教えてください:) – Alex

答えて

0

ここにあなたの作業バージョンです:

import { Component, NgModule } from '@angular/core' 
import { BrowserModule } from '@angular/platform-browser' 
import { NgForm } from '@angular/forms'; 
import { CommonModule } from '@angular/common'; 
import { FormsModule } from '@angular/forms'; 
@Component({ 
    selector: 'my-app', 
    template: ` 
      <div> 
      <form #f="ngForm"> 
       <button (click)="log(name)">Click me</button> 
       <input *ngIf="true" name="name" [(ngModel)]="name" /> 
      </form> 
      </div> 
      `, 
}) 
export class App { 
    name: string; 
    log: string; 
    constructor() { 
    this.name = 'Angular2' 
    } 

    logMe(s) { 
    this.log = s; 
    } 
} 

@NgModule({ 
    imports: [BrowserModule, FormsModule, CommonModule], 
    declarations: [App], 
    bootstrap: [App] 
}) 
export class AppModule { } 
+0

CommonModuleをインポートにインポートするだけですか?どうして? –

+1

ngIfのようなほとんどの角度指令に必要な@paulthomas。しかし、Tuong Leはあなたのコードにいくつかのタイプミスを修正しました(、 ""など)。 log()もlogMe()で置き換える必要があります。 – kdev

+1

**は**動作していないバージョンです。 –

関連する問題