1. ホーム
  2. typescript

[解決済み] Angularでhttpのような静的データからObservableを作成する方法は?

2022-04-26 04:46:12

質問

このようなメソッドを持つサービスを持っています。

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

を、コンポーネントのコンストラクタで次のように登録しています。

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

これは、オブジェクトがサーバーから来る場合は動作しますが、私は、与えられた subscribe() の呼び出しで、静的な文字列(これは testModelService.fetchModel() は uuid を受け取らない) ので、どちらの場合もシームレスに処理されます。

解決方法は?

おそらく of メソッドで Observable クラスがあります。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

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