2017-10-27 14 views
1

プロパティの2方向バインディング0角4:親コンポーネントの値を子コンポーネント内の変更された値で更新するにはどうしたらいいですか?

Plunker

のApp

import {Component, NgModule, VERSION} from '@angular/core' 
import {BrowserModule} from '@angular/platform-browser' 


@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 

    <div class="app"> 
     Parent: {{ myValue }} 
     <myinput 
     [(zModel)]='myValue' 
     (zChange)='valueChanged($event)' 
     ></myinput> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    constructor() { 
    this.name = `Angular! v${VERSION.full}` 
    } 
    myValue: string = 'Hello World'; 
    valueChanged(event) { 
    //alert('app: onchange (' + event + ")"); 
    this.myValue = event; 
    } 
} 
:それは私が持っているよう@outputイベントは、子コントローラに渡される必要があることを知っている親なし子コントローラから親コントローラであります

MyinputComponent

import { Component, EventEmitter, Input, Output } from '@angular/core'; 

@Component({ 
    selector: 'myinput', 
    template: ` 
     <hr> 
    <div > 
     Inside Component: <u>{{ zModel }}</u> <br/><br/> 
     <input type="text" 
      [(ngModel)]="zModel" 
      (input)="valueChanged($event)" 
      > 
    </div> 
    ` 
}) 
export class MyinputComponent { 
    @Input() 
    zModel: string = ''; 

    @Output() 
    zChange: EventEmitter<string> = new EventEmitter<string>(); 

    valueChanged(item){ 
    //alert('onchange (' + this.zModel + ')'); 
     this.zChange.emit(this.zModel); 
    } 
} 
+0

ねえ、どのようにそれは、私が提供する答えを行きました私でしたあなたの要件を満たしていますか? :) – Alex

+0

恐ろしい!一度あなたが答えを指摘したら、それは少し簡単でした。 –

答えて

0

によって余分な作業をしていない場合、あなたは親からのメソッドvalueChangedを削除することを意味します。

[(zModel)]='myValue' 

あなたはこの双方向の結合を達成するために、子供に変更する必要がある唯一のものは、実際にサフィックスを追加することです。その場合は、結合双方向をマークすることによって、正しい軌道に乗っていますChangeを変数の正確な名前に置き換えます。だからではなく、

@Output() 
zChange: EventEmitter<string> = new EventEmitter<string>(); 

のそれはあなたの@Inputとして

@Output() 
zModelChange: EventEmitter<string> = new EventEmitter<string>(); 

zModelとしてマークされるべきです。

また、これはもちろん、子供に正しい変数名をマークする必要がありvalueChangedことを意味します

valueChanged(item){ 
    this.zModelChange.emit(this.zModel); 
} 

したがって、これらの変更後にあなたが親からvalueChangedを削除することができ、子タグはちょうどこのようになります。 :

<myinput [(zModel)]='myValue'></myinput> 

ここにあなたの更新Plunkerです:http://plnkr.co/edit/eYx5wXnYauzqKXtduOvX?p=preview

+0

おかげで@ AJT_82、頭痛の多くを保存しました –

+0

問題はありません、私は助けることができてうれしい!!それがあなたの問題を解決したので、この答えの投票の下にある灰色のチェックマークをクリックして回答を受け入れることを検討してください。 – Alex

関連する問題