думать о наблюдаемом, как о потоке, который предоставляет данные. Ваш компонент должен подписаться на этот поток. Затем компонент будет получать каждое новое значение из потока.
Пример здесь :
@Component({
selector: 'app-users-listing',
templateUrl: './users-listing.component.html',
styleUrls: ['./users-listing.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class UsersListingComponent {
// THIS IS A "STREAM" AND YOU NEED TO SUBSCRIBE TO IT IN THE TEMPLATE OR INSIDE CODE
users$: Observable<UserInterface[]> = this.activatedRoute.data.pipe(
map(data => data.users),
);
constructor(
private activatedRoute: ActivatedRoute,
) { }
}
Давайте подпишемся на users$
внутри шаблона
<mat-list>
<!-- "users$ | async" creates a subscription -->
<mat-list-item *ngFor="let user of (users$ | async)">
<h3 matLine> {{ user.first_name + ' ' + user.last_name }} </h3>
<p matLine>
<span> {{user.email}} </span>
</p>
</mat-list-item>
</mat-list>
По вашему примеру. Попробуйте изменить свой сервис, чтобы он возвращал Observable из метода и подписывался на него в вашем компоненте. Это может быть как
searchForCompany () {
return this.databaseRef.valueChanges()
}
И подписаться на него в компоненте, преобразовать полученные данные и т. Д. c. Это может выглядеть так:
export class MyComponent {
constructor (private service: SubscriptionService) {}
ngOnInit(): void {
this.service.searchForCompany().pipe(
// SOME ADDITIONAL LOGIC
// --> WRITE SOME CODE TO DESTROY SUBSCRIPTION HERE <---
).subscribe();
}
}
ИЛИ создать свойство класса - можно наблюдать. И подпишитесь на него в шаблоне, используя async
pipe
export class MyComponent {
propert$ = this.service.searchForCompany().pipe(
// SOME ADDITIONAL LOGIC
)
constructor (private service: SubscriptionService) {}
}
Надеюсь, это поможет.