Вы получаете данные из сервиса только один раз, так как вы возвращаете обещание. Обещание возвращает значение только один раз, а затем они завершаются. Что вам нужно, это Observable.
Вы можете определить publi c Observable в вашем сервисе.
Что-то вроде:
export class ExtractorService {
public myObservable$: Observable<Array<string>>`;
constructor(private fstore: AngularFirestore) {
this.myObservable$ = this.fstore.firestore.collection('banned').doc('words')
.onSnapshot.pipe(map(doc -> doc.data().cars));
}
}
Таким образом, ваш Observable будет манипулировать Снимок можно наблюдать, только возвращая автомобили всем своим подписчикам.
После того, как вы определили свой Observable, вы можете подписаться на каждый компонент, где вам нужны данные. Например,
export class SomeComponent {
private onDestroy$ = new Subject();
constructor(private extractorService: ExtractorService) { }
public ngOnInit() {
this.extractorService.myObservable$
.pipe(takeUntil(this.onDestroy$))
.subscribe(data => {
this.banWords = data;
console.log("words: ", this.banWords )
});
}
public ngOnDestroy() {
// Unsubscribe all subscriptions of this component.
this.onDestroy$.next();
}
}
Преимущество использования Observables состоит в том, что вы можете использовать их непосредственно в своих шаблонах. Например, если ваш сервис будет опубликован c в вашем компоненте, вы можете использовать асин * трубу c в вашем шаблоне, чтобы иметь доступ к текущим значениям наблюдаемого:
<div *ngFor="let car of extractorService.myObservable$ | async">
{{ car }}
</div>