我想创建一个自定义事件,该事件可以从任何组件触发并在我的angular 7应用程序中收听任何组件

时间:2018-11-17 18:43:05

标签: javascript angular typescript angular7

我想创建一个自定义事件,该事件可以从我的angular 7应用程序中的任何组件触发并收听任何组件

假设我有1个组件,其中有一个单击按钮,我想用一些数据触发自定义事件。接下来,将有另一个组件,它将在触发事件时不断监听该事件,它将执行一些代码并相应地更新ui。

我应该如何实施?

1 个答案:

答案 0 :(得分:1)

好吧,好吧,您正在寻找的是共享服务。此共享服务将具有'use strict' const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.sendNotification = functions.database.ref('/notifications/{user_id}/{notification_id}').onWrite((change, context) => { const user_id = context.params.user_id; const notification_id = context.params.notification_id; console.log('We have a notification from : ', user_id); if (!change.after.val()) { return console.log('A Notification has been deleted from the database : ', notification_id); } const deviceToken = admin.database().ref(`/ServiceProvider/${user_id}/device_token`).once('value'); return deviceToken.then(result => { const token_id = result.val(); const payload = { notification: { title : "New Friend Request", body: "You Have Received A new Friend Request", icon: "default" } }; return admin.messaging().sendToDevice(token_id, payload).then(response => { console.log('This was the notification Feature'); }); }); }); ,它将用作数据源。这样,您就可以推送新的数据流。然后,您将暴露此BehaviorSubject BehaviorSubject

然后,您将从所有要监听数据更改的组件中asObservable subscribe到此Observable

这就是代码中的样子:

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

@Injectable()
export class SharedService {

  private data: BehaviorSubject<any> = new BehaviorSubject<any>(null);
  data$: Observable<any> = this.data.asObservable();

  constructor() { }

  setData(newData) {
    this.data.next(newData);
  }

}

您现在可以将SharedService注入所需的任何控制器中,并从要推送新数据的组件中调用setData(有关更多信息,请参见Sample StackBlitz中的AppComponent)细节)。然后,您还将在其他组件中注入SharedService,并在其中将subscribedata$的{​​{1}}中(请参阅ngOnInit有关详细信息,请参见示例StackBlitz)

这是您推荐的Sample StackBlitz