2016-07-06 10 views
6

角2のchangeイベントとは何ですか?それはいつ発送され、どうすれば使えますか?
I.e.私は(change)="update()"経由で次のコードを購読していますか?角2の `change`イベントとは何か

http://plnkr.co/edit/mfoToOSLU6IU2zr0A8OB?p=preview

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

@Component({ 
    selector: 'inner-component', 
    template: ` 
    <label><input type="checkbox" [(ngModel)]="data.isSelected"> Selected</label> 
    ` 
}) 
export class InnerComponent { 
    data = { isSelected: false }; 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <p><inner-component (change)="update()"></inner-component></p> 
    <p>The component was updated {{count}} times</p> 
    `, 
    directives: [InnerComponent] 
}) 
export class AppComponent { 
    count = 0; 

    update() { 
    ++this.count; 
    } 
} 

PS:Same question in Russian

+0

私はそれが動作しますので、驚い:それは、ロギングとイベントによって確認することができます。角度からのバグのような感じ。 – maxisam

答えて

12

changeinputに発生し、domツリーによってバブルし、inner-component要素で処理されます。

http://plnkr.co/edit/J8pRg3ow41PAqdMteKwg?p=preview

@Component({ 
    selector: 'my-app', 
    template: ` 
    <p><inner-component (change)="update($event)"></inner-component></p> 
    <p>The component was updated {{count}} times</p> 
    `, 
    directives: [InnerComponent] 
}) 
export class AppComponent { 
    count = 0; 

    update($event) { 
    console.log($event, $event.target, $event.currentTarget); 
    ++this.count; 
    } 
} 
+2

実際にどこでも(変更する)ことができます。それは本当に驚くべきことです。 – maxisam

3

changeイベントは、入力フィールドで発生した変更を通知します。あなたの内側のコンポーネントは、ネイティブの角度成分ではないので、あなた自身エミッターイベントをspecifiyする必要があります。

@Component({ 
    selector: 'inner-component', 
    template: ` 
    <label><input type="checkbox" (change)="inputChange.emit($event)" [(ngModel)]="data.isSelected"> Selected</label> 
    ` 
}) 
export class InnerComponent { 
    @Output('change') inputChange = new EventEmitter(); 

    data = { isSelected: false }; 
} 

をそして、あなたのAppComponentに今のイベントを受信して​​いる:

イベントバブリングです
@Component({ 
    selector: 'my-app', 
    template: ` 
    <p><inner-component (change)="update($event)"></inner-component></p> 
    <p>The component was updated {{count}} times</p> 
    `, 
    directives: [InnerComponent] 
}) 
export class AppComponent { 
    count = 0; 

    update(event: any) { 
    ++this.count; 
    console.log(event); 
    } 
} 
+1

[マイコード](// plnkr.co/edit/mfoToOSLU6IU2zr0A8OB?p=preview)**は**動作しています。プランカを開くと、チェックボックスをクリックした後に変更数が増えます。 [you code](// plnkr.co/edit/wCR7xS7ygEZijsN4B34W?p=preview)では、各チェックボックスのクリックで 'change'が** ** **と呼ばれます。 – Qwertiy

+0

私は理由を見つけました。入力時に '(変更)'コードを使用していただきありがとうございます。私はEventEmitterの名前を 'change'と指定していたので、動作しませんでした。 – Qwertiy

関連する問題