私は、Webアプリケーションのワイドな設定の保存と取得を可能にする、Angular 4ベースのサービス(C#ベースのRESTful APIを使用)を構築しようとしています。すべての一般的なアプリケーション設定のキーと値のペアに基づくルックアップのようなもの。アングル4ベースのサービスから単一の値を取得するためのパターン
アイデアはこれです:
- は、クライアント側のJavaScriptの配列にC#WEBAPIベースのRESTfulなサービスからのアプリケーションの起動時にすべての設定を取得し、角4サービスに保存されています。
- 特定の設定が必要な場合は、最初にローカルで検索された配列でその設定を調べ、それを返します。
- 上記の設定が見つからない場合は、その特定の設定のWebAPIサービスを呼び出して使用可能かどうかを確認し、取得します。また、検索された設定をクライアント側の配列にプッシュするので、必要になるまで呼び出す必要はありません。
私が午前問題はこれです:
私は待つこと、Webアプリケーションの状況を処理できるように、私は、ローカル配列の設定を持っている場合でも、観測を返すようにしたいです設定を取得するために使用します。
また、特定の設定のAPI呼び出しが失敗する状況も処理したいと考えています。
私が今持っているものは以下を参照してください。
'use strict';
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { EmptyObservable } from 'rxjs/observable/EmptyObservable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/share';
import { Subject } from 'rxjs/Subject';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { ReplaySubject } from 'rxjs/ReplaySubject';
import { SettingAPIURLs } from '../global.urls';
import * as Interfaces from "../interfaces/models.interface";
import * as Classes from "../classes/models.classes";
@Injectable()
export class SettingsService {
private _settings: BehaviorSubject<Classes.Setting[]>;
private settingDataStore: {
settings: Classes.Setting[]
}
constructor(private http: Http) {
this.settingDataStore = { settings: [] }
}
loadSettings() {
this.http.get(SettingAPIURLs.GetSettings)
.map(response => response.json())
.subscribe(data => {
this.settingDataStore.settings = data;
this._settings.next(Object.assign({}, this.settingDataStore).settings);
}, error => {
console.log("There were errors in attempting to retrieve the web application's settings: " + error);
});
}
get CurrentSettings() {
return this._settings.asObservable().share();
}
retrieveSetting(SettingName: string): Observable<Classes.Setting> {
/*
I am lost as to what to do here.
*/
let returnedObservable: Observable<Classes.Setting> = new Observable<Classes.Setting>();
if (typeof (SettingName) === "undefined" || SettingName === null) {
return new EmptyObservable();
}
this.http.get(SettingAPIURLs.GetSetting + "?SettingName=" + SettingName)
.map(response => response.json())
.first();
}
}