Javascript 将事件传递给Angular 2应用程序中不是另一个组件的父级或子级的组件
我正在尝试找出一种最简单的方法,当事件不共享父子关系时,将事件从一个Angular 2组件传递到另一个组件 具体来说,我有一个用于打开对话框的组件(当单击时,新组件将打开)。用户单击新对话框组件上的按钮后,我希望将该事件的通知发送回原始组件(单击按钮打开对话框/组件开始),以便在那里启动函数 以下是原始组件中用于触发对话框打开的代码:Javascript 将事件传递给Angular 2应用程序中不是另一个组件的父级或子级的组件,javascript,angular,typescript,Javascript,Angular,Typescript,我正在尝试找出一种最简单的方法,当事件不共享父子关系时,将事件从一个Angular 2组件传递到另一个组件 具体来说,我有一个用于打开对话框的组件(当单击时,新组件将打开)。用户单击新对话框组件上的按钮后,我希望将该事件的通知发送回原始组件(单击按钮打开对话框/组件开始),以便在那里启动函数 以下是原始组件中用于触发对话框打开的代码: public onResponseSelected(option, selectedService) { const primaryEmail = thi
public onResponseSelected(option, selectedService)
{
const primaryEmail = this.getPrimaryEmail();
let currentService = this.selectedService;
let activeList = this.getActiveList();
if (option && option.toString() === 'Follow-up Required')
{
// Create dialog
let dialogRef: MdDialogRef<ResponseProcessComponent>
= this.mdDialog.open(ResponseProcessComponent, {
disableClose: true,
data: {
option: option,
currentService: currentService,
primaryEmail: primaryEmail,
activeList: activeList
}
});
dialogRef = null;
}
}
public on responseselected(选项,selectedService)
{
const primaryEmail=this.getPrimaryEmail();
让currentService=this.selectedService;
让activeList=this.getActiveList();
if(option&&option.toString()==“需要跟进”)
{
//创建对话框
让dialogRef:MdDialogRef
=this.mdDialog.open(ResponseProcessComponent{
disableClose:对,
数据:{
选项:选项,
currentService:currentService,
primaryEmail:primaryEmail,
活动列表:活动列表
}
});
dialogRef=null;
}
}
我正在“打包”一些数据,作为“数据”的一部分发送到对话框组件。一切都按预期进行
现在,我只需要一种方法将事件触发器从对话框组件(responseProcessComponent)发送回原始组件。提醒一下,这里没有共享视图,所以我不能通过Input()传递这些视图,就好像它们是具有父子关系的组件一样
我只需要一种方法来触发对话框组件中的事件,并将其发送回另一个组件。最简单的方法是什么?您可以使用共享服务并从注入该服务的任何组件发送通知 考虑以下几点: dialog.service.ts
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class DialogService {
public dialog = new BehaviorSubject<string>('Not Clicked');
dialogObservable = this.dialog.asObservable();
changeDialogState (value: string): void {
this.dialog.next(value);
}
}
要为对话框设置新状态,请执行以下操作:
changeDialogState(){
this.ds.changeDialogState('Cliked');
}
不要忘了在同一模块的provides数组中添加服务,在declarations数组中添加组件,这样就不会出现任何错误 您可以使用共享服务并从注入该服务的任何组件发送通知 考虑以下几点: dialog.service.ts
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class DialogService {
public dialog = new BehaviorSubject<string>('Not Clicked');
dialogObservable = this.dialog.asObservable();
changeDialogState (value: string): void {
this.dialog.next(value);
}
}
要为对话框设置新状态,请执行以下操作:
changeDialogState(){
this.ds.changeDialogState('Cliked');
}
不要忘了在同一模块的provides数组中添加服务,在declarations数组中添加组件,这样就不会出现任何错误 正如我提到的,在这里使用共享服务不是一个理想的选择。没有其他选择吗?@Ademo没有。你最好的选择是使用服务好的,我想这可能是一个非常简单的服务实现。我将尝试并注入这两个组件,因为听起来似乎没有其他选项。唯一的选项,对于不相关的组件,使用单例服务的BehaviorSubject。正如我所提到的,在这里使用共享服务不是一个理想的选项。没有其他选择吗?@Ademo没有。你最好的选择是使用服务好的,我想这可能是一个非常简单的服务实现。我将尝试并注入这两个组件,因为听起来似乎没有其他选项。唯一的选项,对于不相关的组件。我认为,如果你不取消订阅共享服务,你就造成了内存泄漏。@bryan60是的,我知道,但忘了提一下。所以Ademo在你的Ngondestory生命周期钩子中,请取消订阅以避免内存泄漏。祝你的项目好运。我不知道这是否重要,但上面的
receiver
拼错了-这个词应该拼写为“receiver”。仅供参考,如果你不取消订阅共享服务,你就造成了内存泄漏。@bryan60是的,我知道,但忘了提及它。所以Ademo在你的Ngondestory生命周期钩子中,请取消订阅以避免内存泄漏。祝你的项目好运。我不知道这是否重要,但是上面的receiver
拼错了-单词应该拼写为“receiver”。