我的情況怎麼樣,我有哪些需要相互溝通相互依存的5組件。例如,如果我點擊所有其他4個組件上的按鈕A需要聽取點擊並提醒某事。其他組件中的按鈕也由所有其他組件聽取4.需要有關如何實現此目的的最佳解決方案。相互依賴的組件,它需要相互溝通
這裏是我的代碼片斷
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'broadcast-recive/service/common-service';
@Component({
selector: 'app-broadcaster',
templateUrl: './broadcaster.component.html',
styleUrls: ['./broadcaster.component.css']
})
export class BroadcasterComponent implements OnInit {
constructor(private commonservice: CommonService) { }
ngOnInit() {
}
broadCastMe(): void
{
this.commonservice.btnClickedInBroadCasterComponent((<HTMLButtonElement>event.target).id);
}
}
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'broadcast-recive/service/common-service';
@Component({
selector: 'app-listener1',
templateUrl: './listener1.component.html',
styleUrls: ['./listener1.component.css']
})
export class Listener1Component implements OnInit {
constructor(private commonservice: CommonService) { }
ngOnInit() {
this.commonservice.clickStatusForBroadCastercomponentBtn.subscribe((id: string) => {
alert('alert from listner 1');
})
}
}
import { Component, OnInit } from '@angular/core';
import { CommonService } from 'broadcast-recive/service/common-service';
@Component({
selector: 'app-listener2',
templateUrl: './listener2.component.html',
styleUrls: ['./listener2.component.css']
})
export class Listener2Component implements OnInit {
constructor(private commonservice: CommonService) { }
ngOnInit() {
this.commonservice.clickStatusForBroadCastercomponentBtn.subscribe((id: string) => {
alert('from listner 2');
});
}
}
這裏我總是得到警告框「從聽衆2」,我的要求是它應同時觸發聽者。請幫我重構代碼。打擊是我的服務,我正在使用rx js進行訂閱。
import {Subject} from 'rxjs/Subject';
import { Injectable } from '@angular/core';
@Injectable()
export class CommonService {
public clickStatusForBroadCastercomponentBtn = new Subject<string>();
public clickStatusForBcomponentBtn = new Subject<string>();
btnClickedInBroadCasterComponent(btnId: string): void {
this.clickStatusForBroadCastercomponentBtn.next(btnId);
}
btnClickedInComponentB(btnId: string): void {
this.clickStatusForBcomponentBtn.next(btnId);
}
}
這是Angular(2+)還是AngularJS(1.x)?你的意思是相關組件(父主機組件選擇器DOM)還是不相關(沒有父主機選擇器DOM)?您是否瀏覽了基本組件交互頁面https://angular.io/guide/component-interaction? –