当一个组件没有父子关系时,如何从一个组件调用方法到另一个组件?
我有两个兄弟组件,如下所示:
header.ts
private postValues() {
this._PartService.PostDataValues(this.search)
.subscribe(result => {
})
}part.ts
this._PartService.getMasterData()
.subscribe(result => {
})在这种情况下,我需要在getMasterData()中调用postValues()方法来获取一些描述值,并且它没有父子通信。
发布于 2018-08-29 14:18:50
不能直接触发兄弟组件方法,但有一种方法可以使用import { BehaviorSubject } from 'rxjs';触发兄弟组件事件
我使用这种方法将数据传递给同级组件,但如果触发,它也会起作用。
首先创建服务,我称之为DataService.ts的服务
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private triggerEventMsg = new BehaviorSubject(false);
triggerEvent = this.triggerEventMsg.asObservable();
constructor() { }
triggerEvent(val: boolean) {
this.messageSource.next(message)
}
}现在,一个组件触发另一个组件,目前,Com1触发Com2事件。
Com1使用传递布尔值触发DataService triggerEvent。
Com1.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com1',
template: `
{{message}}
<button (click)="newMessage()">New Message</button>
`
})
export class Com1 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
}
com1ClickEvent() {
this.data.triggerEvent(true);
}
}当数据更改Com2组件中方法触发器时,Com2会观察该变量。
Com2.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com2',
template: `
<p>Com2</p>
`
})
export class Com2 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
this.data.triggerEventMsg.subscribe(message => {
// Do What ever you want.
})
}
}发布于 2020-04-30 18:07:11
我的解决方案是使用
ngAfterViewChecked(){
this.cdRef.detectChanges();
}在您得到错误的组件中
发布于 2019-10-23 23:43:48
与不是父子组件的组件通信。所以我通过服务来传达它
service.ts
value=false;
search: EventEmitter < boolean > = new EventEmitter();
toggle() {
this.value = !this.value;
this.search.emit(this.value);
}search.ts
submit():void{
this.service.toggle();
}Home.ts
ngOnInit() {
this.service.change.subscribe(value => {
//some code here
}
}https://stackoverflow.com/questions/52069842
复制相似问题