我试图遵循这个答案,但它太令人困惑了Angular 2 兄弟组件之间的事件捕获
我想调用一个方法子组件 1当点击某物时子组件 2
子组件 2 发出一个名为 trackClick 的事件。
父组件:
<div>
<audio-player></audio-player>
<audio-albums></audio-albums>
</div>
子组件 1(音频播放器)
// Don't know what to do here, want to call this function
trackChanged(track){
console.log("YES!! " + track);
}
子组件 2(音频专辑)
<li class="track" (click)="playTrack(track)"> </li>
@Output() trackClick = new EventEmitter<any>();
playTrack(track):void{
console.log("calling playTrack from child 2:" + track);
this.trackClick.next([track]);
}
你不能这样做。首先,您必须使用 @ViewChild(Child2) 在父级中获取 child2 (通过组件而不是字符串选择 ViewChild 很重要)。那么你必须在parent中捕获事件并在child2上执行你想要的任何方法。或多或少是这样的:
import { AudioAlbumsComponent } from '...';
import { AudioPlayerComponent } from '...';
@Component({
template: `
<div>
<audio-player></audio-player>
<audio-albums (trackClick)="onTrackClicked($event)"></audio-albums>
</div>`,
directives: [AudioPlayerComponent, AudioAlbumsComponent],
})
export class Parent {
@ViewChild(AudioPlayerComponent) private audioPlayer: AudioPlayerComponent;
onTrackClicked($event) {
this.audioPlayer.trackChanged($event);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)