Mam prawdziwy problem owijając głowę wokół obserwowalnych i subskrypcji w kanale2. Problem, który obecnie mam, jest następujący:Mam funkcję wykonywania komponentu po zakończeniu usługi http.get call
Mam usługę, która zawiera metody publikowania i pobierania danych z interfejsu API. Usługa jest wstrzykiwana do komponentu, który bezpośrednio wywołuje te metody w usłudze. Usługa pobiera dane i przechowuje je samodzielnie, ale chcę przetworzyć te dane w komponencie. Nie mogę się dowiedzieć, jak sprawić, by komponent wykonywał funkcję po tym, jak usługa odzyskała i zapisała dane.
service.ts
import { Injectable } from 'angular2/core';
import { Http } from 'angular2/router';
@Injectable()
export class Service {
result: Object;
constructor(http: Http) {
this.http = http;
}
httpGet(url) {
return this.http.get(url).subscribe(
result => this.result = result.json(),
error => console.log(error),
() => {}
)
}
}
component.ts
import { Component } from 'angular2/core';
import { Service } from './service';
@Component({
...
})
export class Component {
formattedResult: Object;
constructor(service: Service) {
this.service = service;
this.service.httpGet('/api')
// How do I call format result on service.result only after it is completed?
this.formatResult(service.result) // Need to execute this after the http call is completed
// I want something like:
this.service.httpGet('/api').then(() => formatResult(this.service.result));
}
formatResult(result) {
this.formattedResult = result.map(x => x.length) // For example
}
}
http://stackoverflow.com/questions/34739574/notification-component-when-service-function-is-complete-in-angular/34739630#34739630 –
@ GünterZöchbauer Dzięki, jest blisko, ale chciałem zachować. subskrybuj w usłudze, ponieważ przechowuje ona te informacje w celu późniejszego dostępu. Nie można mieć dwóch .subscribes na jednym http.get (będzie on wywoływał dwa razy). Chyba, że zaakceptowany wzór projektu ma mieć subskrypcję tylko w komponentach i jawnie ustawić zmienne usługi ze składnika? Chciałem zachować oddzielną logikę usług i komponentów. –
http://stackoverflow.com/a/34405243/215945 - ta odpowiedź wyświetla obserwowalne łańcuchy za pomocą 'flatMap()'. –