У меня есть метод consultaPublicacoes в службе с именем bd, которая возвращает все имеющиеся у меня публикации в базе данных firebase для конкретного электронного письма пользователя.
bd.service
public consultaPublicacoes(email:string):Observable<any>{
return this.checkarPublicacoes=new Observable((observer)=>{
firebase.database().ref(`publicacoes/${btoa(email)}`)
.orderByKey()
.once('value')
.then((snapshot:any)=>{
let publicacoes:Array<Publicacao>=[]
snapshot.forEach((childSnapshot:any) => {
let publicacao=childSnapshot.val()
publicacao.key=childSnapshot.key
publicacoes.push(publicacao)
});
return publicacoes.reverse()
}).then((publicacoes:any)=>{
publicacoes.forEach((publicacao)=>{
firebase.storage().ref().child(`imagens/${publicacao.key}`).getDownloadURL()
.then((url:string)=>{
publicacao.url_imagem=url
firebase.database().ref(`usuario_detalhe/${btoa(email)}`).once('value')
.then((snapshot:any)=>{
publicacao.nome_usuario=snapshot.val().nome_usuario
})
})
})
observer.next(publicacoes)
})
})
ИУ меня также есть метод atualizarTimeLine () для publicacoesComponent, который отвечает за передачу данных, возвращаемых из Observable, в переменную this.publicacoes (PublicacoesComponent)
PublicacoesComponent
export class PublicacoesComponent implements OnInit, OnDestroy {
public email:string
public publicacoes:Publicacao[];
public gostou:boolean=false;
constructor(private bd:Bd) { }
ngOnInit() {
firebase.auth().onAuthStateChanged((user)=>{
if(user!=null){
this.email=user.email
this.atualizarTimeLine()
}
})
this.atualizarTimeLine();
}
public atualizarTimeLine(){
console.log("atualizarTimeLine from publicacoes")
this.bd.consultaPublicacoes(this.email)
.subscribe((publicacoes:any)=>{
console.log(publicacoes)
this.publicacoes=publicacoes
})
}
....
MenuComponent
export class MenuComponent implements OnInit {
email: string;
constructor(private bd:Bd, private router:Router, private autenticacao:Autenticacao) { }
ngOnInit() {
firebase.auth().onAuthStateChanged((user)=>{
if(user!=null){
this.email=user.email
this.atualizarTimeLine()
}
})
this.atualizarTimeLine()
}
atualizarTimeLine(){
console.log("atualizarTimeLine From MenuComponent")
this.bd.consultaPublicacoes(this.email)
//this.router.navigate(['/home']);
}
Я хочу иметь возможность обновлять значение переменной publicacoes (publicacoesComponent) каждый раз, когда consultaPublicacoes вызывается из MenuComponent (this.bd.consultaPublicacoes ()), как я могу это сделать?Является ли наблюдаемый в консалте Publicacao лучшим вариантом?