我想创建一个自定义事件,该事件可以从我的angular 7应用程序中的任何组件触发并收听任何组件
假设我有1个组件,其中有一个单击按钮,我想用一些数据触发自定义事件。接下来,将有另一个组件,它将在触发事件时不断监听该事件,它将执行一些代码并相应地更新ui。
我应该如何实施?
答案 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
,并在其中将subscribe
到data$
的{{1}}中(请参阅ngOnInit
有关详细信息,请参见示例StackBlitz)
这是您推荐的Sample StackBlitz。