Michail Michailidis Michail Michailidis - 1 month ago 8
TypeScript Question

How to create an Observable from static data similar to http one in Angular 2

I am having a service that has this method:

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());
}
}
}


in the component's constructor I am subscribing like this:

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)
);
}
}


This works if an object comes from the server..but I am trying to create an observable that will work with the given the existing subscribe() call for a static string (this happens when
testModelService.fetchModel()
isn't given a uuid) so there is seamless handling in both cases. Is this possible?

Any help is appreciated! Thanks!

Answer

Perhaps you could try to use the of method of the Obserable class:

public fetchModel(uuid: string = undefined): Observable<string> {
  if(!uuid) {
    return Observable.of(new TestModel()).map(o => JSON.stringify(o));
  }
  else {
    return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
            .map(res => res.text());
  }
}
Comments