Tengo un servicio que tiene este método:
export class TestModelService {
public testModel: TestModel;
constructor( @Inject(Http) public http: Http) {
}
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) {
//return Observable of JSON.stringify(new TestModel());
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.map(res => res.text());
}
}
}
en el constructor del componente me suscribo así:
export class MyComponent {
testModel: TestModel;
testModelService: TestModelService;
constructor(@Inject(TestModelService) testModelService) {
this.testModelService = testModelService;
testService.fetchModel("29f4fddc-155a-4f26-9db6-5a431ecd5d44").subscribe(
data => { this.testModel = FactModel.fromJson(JSON.parse(data)); },
err => console.log(err)
);
}
}
Esto funciona si un objeto proviene del servidor, pero estoy tratando de crear un observable que funcione con la subscribe()
llamada dada para una cadena estática (esto sucede cuando testModelService.fetchModel()
no recibe un uuid), por lo que hay un manejo perfecto en ambos casos.
typescript
promise
angular
observable
rxjs
Michail Michailidis
fuente
fuente
import { of } from 'rxjs';
usar y usarof
, en lugar deObservable.of
..map()
un resultado de get, por lo que debe hacerlo.pipe(map((res:any) => res.json()))
. Vea aquí: stackoverflow.com/a/35220045/986160A partir de julio de 2018 y el lanzamiento de
RxJS 6
, la nueva forma de obtener un Observable a partir de un valor es importar elof
operador así:import { of } from 'rxjs';
y luego crea lo observable a partir del valor, así:
of(someValue);
Tenga en cuenta que solía tener que hacer
Observable.of(someValue)
como en la respuesta actualmente aceptada. Hay un buen artículo sobre los otros cambios de RxJS 6 aquí .fuente
Las cosas parecen haber cambiado desde Angular 2.0.0
La
.next()
función se llamará a su suscriptor.fuente
of
función de rxjs, comoimport 'rxjs/add/observable/of'
Así es como puede crear un observable simple para datos estáticos.
Espero que esta respuesta sea de ayuda. Podemos usar una llamada HTTP en lugar de datos estáticos.
fuente
De esta manera puede crear Observable a partir de datos, en mi caso necesito mantener el carrito de compras:
service.ts
Component.ts
fuente