Angular 2 => 通知应用程序组件中的事件的路由组件

2023-12-12

慢慢地掌握了 Angular 2,但我在一个特定问题上陷入了死胡同。

如果你有这样的安排;

<parent>
    <child/>
</parent>

我可以使用 @Input() 通知子级父级中的更改,并让它监听更改。 我可以使用 @Output() 和 EventEmitters 通知父级子级的更改。

我现在正在研究的是通知路由组件(单击链接时动态加载的组件)有关主 appComponent 中发生的特定事件。请参阅下面的示例;

<app>
    <button (click)='addEntity()>Add</button>
    <router-outlet></router-outlet>
</app>

我希望能够通知加载到路由器出口的组件该按钮已被单击。

使用的一个示例是具有多个功能(英雄/联系人/宠物等),每个功能都有自己的用于添加实体的对话框。根据所选的路由,需要通知所选的功能组件(例如 ContactComponent)以显示其特定的详细信息组件/视图/模板(例如 contact-detail.component)。

实现这一目标的最佳方法是什么?

Cheers


还可以仅使用共享服务在不同组件之间进行通信,例如通过这样的信使服务:

信使服务

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Observable } from 'rxjs/Rx';

@Injectable()
export class MessengerService {
    private messageSource: BehaviorSubject<boolean> = new BehaviorSubject(true); 
    public message = this.messageSource.asObservable();
    public buttonClicked(value: boolean) {
        this.messageSource.next(value);
    }
}

父组件

export class ParentComponent {
    constructor(private messengerService: MessengerService) { }
    addEntity() {
        this.messengerService.buttonClicked(true);
    }
}

子组件

import { Subscription } from 'rxjs/Rx';
export class ChildComponent implements OnInit, OnDestroy {
    private messageSubscription: Subscription;
    constructor(private messengerService: MessengerService) { }
    ngOnInit() {
        this.messageSubscription = this.messengerService.message.subscribe(m => {
            // Act upon the click event
        });
    }
    ngOnDestroy() {
        this.messageSubscription.unsubscribe();
    }
}

这将是一种解耦组件并依赖消息服务的干净方法(您可以在需要时在多个组件中订阅该服务)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 => 通知应用程序组件中的事件的路由组件 的相关文章

随机推荐