我已經這段代碼...這是一個示例教程應用程序,我試圖構建它反映了開發人員的日常需求。 實際上,當用戶在父組件上鍵入「fire」時,子節點執行向父節點發送單詞「booom」的事件 - 這是一個示例,演示使用@Input向子組件發送消息的子組件間的通信和OnChanges。Angular 2 - 組件之間的雙向溝通
現在,我試着做不同的事情:當用戶按下回車鍵(keyCode == 13)時,父母應該用一些方法告訴孩子一條類似「Target Locked」的消息給孩子。有了這個,我們將有一個組件間雙向通信的場景。
什麼是最好的方法?
child.component
import {Component, Input, OnChanges, EventEmitter,Output, Injectable} from 'angular2/core';
@Injectable()
@Component({
selector: 'child-component',
template: `<p>I'm the child component</p>
`
})
export class ChildComponent implements OnChanges {
@Input() txt: string;
@Output() aim: EventEmitter<any> = new EventEmitter();
ngOnChanges(changes: {[propName: string]: SimpleChange}) {
var t = changes['txt'].currentValue;
if(t == 'fire') {
console.log('Fire !!!');
this.aim.emit("booom !!!");
}
}
}
parent.component
import {Component} from 'angular2/core';
import {ChildComponent} from './child.component'
@Component({
selector: 'parent-component',
directives : [ChildComponent]
template: `<p>I'm the parent component</p>
<input type="textbox" [(ngModel)]="theModel" (keydown)="arrow($event)">
<p>feedback: {{feedback}}</p>
<child-component txt="{{theModel}}" (aim)="feedback=$event"></child-component>
`
})
export class ParentComponent {
theModel;
feedback;
arrow (evt){
if(evt.keyCode ==13) {
//Need to cause an event on the child - a message like "Target Locked"
};
}
}
使用'@Input()'從父項與子項進行通信,'@Output()'從子項與父項進行通信或使用服務。 –
「現在,我試着做不同的事情:」 - 我看不出這裏有什麼不同。只需使用相同的輸入和輸出屬性併發送不同的消息,或添加另一組輸入和輸出屬性。還要檢出[Component Interaction cookbook](https://angular.io/docs/ts/latest/cookbook/component-communication.html) –
父級使用導入和選擇器合併子級ny。所以,父母可以從孩子那裏捕捉(目標)事件。我的懷疑即將採取相反的方式:孩子捕捉父母的事件。記住孩子永遠不會有父母的選擇。這就是爲什麼它真的不同。明白了嗎? –