Юрий, ответ правильный. Но я также добавляю свои 2 цента.
В конце концов, это зависит от того, является ли компонент, в котором вы хотите показать эти данные, дочерним по отношению к текущему, где вы извлекаете данные, или совершенно другим.
Поскольку я чувствовал, что Angular ориентирован на сервис, я бы предложил использовать небольшой сервис для такого рода обмена информацией и использовать шаблон наблюдателя.
примерно так:
create файл street-info.service.ts с ng g s street-info
:
import { Injectable } from '@angular/core';
import { Subject, Observable } from 'rxjs';
@Injectable({providedIn: 'root'})
export class StreetInfoService {
streetObs$: Subject<any>; // your street-data type
streetData: any;
constructor() {
this.streetObs$ = new Subject();
}
getStreetObs(): Observable<any> {
return this.streetObs$.asObservable();
}
setStreetObs(data: any) {
this.streetData = data;
this.streetObs$.next(data);
}
getStreetData() {
return this.streetData;
}
}
В вашем методе getInfosOfStreet () (внедрите сервис в конструктор вашего компонента, чтобы использовать его):
getInfosOfStreet(street):void{
this.orderService.getStreetInfos(street).subscribe(data=>{
console.log(data);
this.streetInfoService.setStreetObs(data); // here you can send the data to your service and let observers of the streetInfoObservable get notified.
});
}
Теперь в вашем street-info.component.ts вы можете подписаться на это наблюдаемое, например так:
unsubscribe$: Subject<void>;
streetData: any; // or an array of whatever type you need
constructor(private streetInfoService: StreetInfoService) {
this.unsubscribe$ = new Subject(); // You need this subject to notify on destroy to unsubscribe from the subscription to prevent memory-leaks
}
ngOnInit() {
this.streetData = this.streetInfoService.getStreetData();
// and here subscribe to the observable
this.streetInfoService.getStreetObs().pipe(
takeUntil(this.unsubscribe$)
).subscribe(streetData => {
// if its an object
this.streetData = streetData;
// if its an array do something like this
this.streetData = [...streetData]; // I am using the spread operator here
})
}
// here you unsubscribe from the observables
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
Но это действительно зависит от структуры вашего приложения. Если <app-street-info>
является дочерним элементом представления, извлекающего данные, или у них один и тот же родительский элемент, достаточно использования @Input () и передачи данных от родительского к дочернему.
С уважением.