如何在两个兄弟组件之间传递数据?
How to Pass data between two sibling components?
<container>
<navbar>
<summary></summary>
<child-summary><child-summary>
</navbar>
<content></content>
</container>
所以,我有一个 select 确实向 和 发送值。
OnSelect 方法在组件内部(更改)很好地触发。
所以,我尝试使用@Input、@Output 和@EventEmitter 指令,但我看不到如何将事件检索为组件的@Input,除非继续parent/child 模式。我创建的所有示例都与组件之间存在关系。
编辑:BehaviorSubject 不工作的示例(所有连接到 API 的服务运行良好,只有 observable 在开始时触发,但在 select 值更改时不触发)
首先在服务中创建一个 BehaviorSubject
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class DataService {
private messageSource = new BehaviorSubject("default message");
currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
this.messageSource.next(message)
}
}
我创建了一个示例,使用 BehaviorSubject
在组件之间发送消息
@Injectable()
export class MyService {
private messageSource = new BehaviorSubject<string>('service');
currentMessage = this.messageSource.asObservable();
constructor() {
}
changeMessage(message: string) {
this.messageSource.next(message)
}
}
<container>
<navbar>
<summary></summary>
<child-summary><child-summary>
</navbar>
<content></content>
</container>
所以,我有一个 select 确实向 和 发送值。
OnSelect 方法在组件内部(更改)很好地触发。
所以,我尝试使用@Input、@Output 和@EventEmitter 指令,但我看不到如何将事件检索为组件的@Input,除非继续parent/child 模式。我创建的所有示例都与组件之间存在关系。
编辑:BehaviorSubject 不工作的示例(所有连接到 API 的服务运行良好,只有 observable 在开始时触发,但在 select 值更改时不触发)
首先在服务中创建一个 BehaviorSubject
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class DataService {
private messageSource = new BehaviorSubject("default message");
currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
this.messageSource.next(message)
}
}
我创建了一个示例,使用 BehaviorSubject
@Injectable()
export class MyService {
private messageSource = new BehaviorSubject<string>('service');
currentMessage = this.messageSource.asObservable();
constructor() {
}
changeMessage(message: string) {
this.messageSource.next(message)
}
}