在Angular应用中,可以使用EventEmitter来实现组件之间的事件监听和通信。但是,如果需要在Angular应用之外的非Angular应用中监听事件,可以使用一些其他的解决方法。
一种常见的解决方法是使用全局事件对象,如window对象。在Angular应用中,可以将事件触发的逻辑封装在一个服务中,并在组件中调用该服务来触发事件。而在非Angular应用中,可以通过监听window对象上的事件来接收并处理事件。
下面是一个例子:
在Angular应用中,创建一个事件服务(event.service.ts):
import { Injectable, EventEmitter } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class EventService {
public event: EventEmitter = new EventEmitter();
public triggerEvent(data: any) {
this.event.emit(data);
}
}
在组件中使用事件服务来触发事件(app.component.ts):
import { Component } from '@angular/core';
import { EventService } from './event.service';
@Component({
selector: 'app-root',
template: `
`
})
export class AppComponent {
constructor(private eventService: EventService) {}
triggerEvent() {
this.eventService.triggerEvent({ message: 'Event triggered' });
}
}
在非Angular应用中,监听window对象上的事件来接收事件(main.js):
window.addEventListener('angularEvent', function(event) {
console.log('Event received:', event.detail);
});
在非Angular应用中,触发事件时可以使用以下代码:
var event = new CustomEvent('angularEvent', { detail: { message: 'Event triggered' } });
window.dispatchEvent(event);
当在Angular应用中点击“Trigger Event”按钮时,将会在非Angular应用的控制台中输出“Event received: { message: 'Event triggered' }”。
请注意,使用全局事件对象来实现事件监听可能不是最佳的解决方案,特别是在多个非Angular应用中需要监听同一个事件时。在这种情况下,可能需要考虑使用其他通信机制,如WebSocket或消息队列。