angular - 如何在 Angular 两个子组件之间进行通信?

标签 angular components

<分区>

我是 Angular 2 的新手。我在两个组件之间进行通信时遇到问题。当我有一个包含父组件和一些子组件的布局时,可以很容易地使用 @Input 注释设置子组件的变量。

但现在我有一个父组件(主要用于布局)和两个子组件的布局:

example Layout

子组件 2 有一堆按钮,它们只创建一条简单的消息。现在我想在子组件一中显示此消息。

如何解决?提前致谢

最佳答案

除了使用 @Input/@Output 和父组件作为“桥梁”的解决方案外,一种常见的方法是引入共享服务。该服务需要在父组件中提供,以便子组件可以共享该服务的单个实例 (How do I create a singleton service in Angular 2?)。

使用 BehaviorSubject as a delegate 的基本示例:

@Injectable()
export class SharedService {

    messageSource: BehaviorSubject<string> = new BehaviorSubject('');

    constructor() { }
}

子组件 1:

export class ChildComponent1 {

    constructor(private sharedService: SharedService) { }

    sendMessage(): void {
        this.sharedService.messageSource.next('Hello from child 1!');
    }
}

子组件 2:

export class ChildComponent2 {

    constructor(private sharedService: SharedService) { }

    ngOnInit(): void {
        this.sharedService.messageSource.subscribe((message) => {
            console.log('Message: ', message); // => Hello from child 1!
        });
    }
}

另请参阅:Angular2 - Interaction between components using a service

关于angular - 如何在 Angular 两个子组件之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41954484/

相关文章:

angular - 用于 Firebase 身份验证 RxJ 的嵌套 exhausMap 和 concatMap

angular - 如何在 Angular 2中将对象从服务返回到组件?

javascript - 不显示此警报 ---> 警报 ("I am inside change");

java - 编写自定义 HtmlResponseWriter JSF

angular - 在具有多个模块(如 JHipster)的项目中嵌套 Angular 组件

Angular - 单击时更改图标颜色

angular - karma 错误 : Cannot set property 'beforePreactivation' of undefined

layout - Nuxt.js - 如何在布局中使用布局

angular - 组件和指令有什么区别?

javascript - 具有动态子组件的 ReactJS 布局组件