typescript - ts2415 - rxjs observable angular 6
crear Observable<T> desde el resultado (2)
Estoy intentando Angular2.
Noté que el servicio http usa un objeto Observable
lugar de Promise
(no me gusta mucho esa opción ... async
/ await
están llegando).
En mi servicio, descargo una lista de Plants
del servicio web. Al hacer clic en una planta, muestro los detalles utilizando la ruta. Pero de esta manera, cuando vuelvo, las plantas se vuelven a descargar (porque se vuelve a llamar al constructor).
Para evitar esto quiero hacer algo como:
public getPlants(): Observable<Plants[]>
{
if (this._plants != null)
return Observable.fromResult (this._plants); //This method does not exists
return this._http.get(''../../res/heroes.json'')...
}
¿Hay una manera de hacerlo? ¿Cómo puedo importar la clase Observable
en mi archivo ts?
¡Gracias!
El método en TypeScript (o JavaScript para esa materia) se llama of
. Learn rxjs tiene un buen tutorial también
Si estás usando rxjs6 obtienes todo desde rxjs
import { Observable, of } from ''rxjs'';
public getPlants(): Observable<Plant[]> {
const mocked: Plant[] = [
{ id: 1, image: ''hello.png'' }
];
// returns an Observable that emits one value, mocked; which in this case is an array,
// and then a complete notification
// You can easily just add more arguments to emit a list of values instead
return of(mocked);
}
En la versión anterior importó el operador desde una ubicación diferente
import { Observable } from ''rxjs/Observable'';
import { of } from ''rxjs/observable/of'';
public getPlants(): Observable<Plant[]> {
const mocked: Plant[] = [
{ id: 1, image: ''hello.png'' }
];
return of(mocked);
}
Y antes de eso lo importó como una extensión para la clase Observable
import { Observable } from "rxjs/Observable";
import ''rxjs/add/observable/of'';
public getPlants(): Observable<Plants[]> {
// this can be changed to a member variable of course
let mocked: Plants[] = [{
id: 1,
image: "hello.png"
}];
return Observable.of(mocked);
}
Esta es mi solución de trabajo:
if (this._heroes != null && this._heroes !== undefined) {
return Observable.create(observer => {
observer.next(this._heroes);
observer.complete();
});
}
Espero que esta sea la mejor solución.