2017-02-01 16 views
1

テキストを入力するための単純なコンポーネントを作成しようとしています。 値が変更されたときにエラーが発生しました。Angular2 - 双方向バインディングのエラー:チェックした後に式が変更されました

私はすでにこのエラーに関する記事を確認しています。 そのうちの1人が「EnableProdMode()を使用する必要があります」と述べました。 それは確かに真実ですが、私はそれが不可欠な解決策ではないと思います。

私には、enableProdMode()より優れた解決策を教えてください。

@Component({ 
    selector: 'text-input', 
    template: '<input type="text" [(ngModel)]="value"/>', 
    inputs: [ 
     'value' 
    ] 
}) 
export class TextInput implements DoCheck { 
    @Input() value: string; 
    @Output() valueChange: EventEmitter<string> = new EventEmitter(); 

    ngDoCheck(): void { 
     console.log(`ngDoCheck: value=${this.value}`); 
     this.valueChange.emit(this.value); 
    } 
} 

-

@Component({ 
    template: ` 
     <h1>Input Components</h1> 
     <h2>Text Input</h2> 
     <div> 
      <text-input [(value)]='textValue'></text-input> 
     </div> 
     <div>{{textValue}}</div>` 
}) 
export class InputsPage { 
    textValue: string = 'Hello World'; 
} 
+0

私はあなたのように入力からparanthesesを削除する必要があると思います: ''。私は、双方向のデータバインディングが必要ないため、エラーが発生したと思います。 –

+0

@alexkucksdorfここでのポイントは、子供に変更が生じたときに親に通知することができるようにするための二重バインディングです。だからここにtwowayバインディングが必要です:) – Alex

答えて

0

あなたはあなただけの変化が起こったとき、親に通知する代わりにngModelChangeを使用して値を発するようにしたい場合は、このためにDoCheckを使用する必要はありません。したがって、追加するngModelChange

<input type="text" [(ngModel)]="value" (ngModelChange)="emitValue()"/> 

@Input() value: string; 
@Output() valueChange: EventEmitter<string> = new EventEmitter(); 

emitValue(): void { 
    this.valueChange.emit(this.value); 
} 

あなたはすごくいいはずです!お役に立てれば!

+0

あなたの助けをありがとうございます。それは私のためにうまくいく。それは大きな助けでした! –

+0

あなたを助けてうれしいです! :)この回答があなたの問題を解決した場合、回答の投票の下にある灰色のチェックマークをクリックしてこの回答を受け入れるかどうか、詳しくはこちらをご覧ください:http://meta.stackexchange.com/a/5235 :) – Alex

+0

私はルールを理解していないことは申し訳ありません。私はそれが閉じられているようにマークするためにそれをクリックした。 stackoverflowで動作する方法を教えていただきありがとうございます。 –

関連する問題