これは長いポストになりますが、私は自分のサーバーとクライアントの間の通信について私の理解に明確にする必要があります。angular4/typescriptで新しいJavascriptオブジェクトを作成するjsonレシービングjson
私にはcityList:City[] = [];
という変数があり、都市リストを含むように設計されています。
The model for `City` is:
export class City{
public name: string;
constructor(name:string){
this.name = name;
}
}
私は、都市のリストを返すように設計されたAPIコールを持っています。このサービスは、私のジェネリックのgetService(下記のgetService)それに注入しました:
getService(url) {
var value: any[] = [];
this.http.get(url)
.map(
(response: Response) => {
const data = response.json()
.subscribe(
(mappedData: any[]) => value = mappedData,
(error) => console.log(error)
)
}
);
return value;
データに基づいて行動するサービス:
import {Injectable, OnInit} from '@angular/core';
import 'rxjs/Rx';
import {City, Neighborhood, Cuisine, Privacy, VenueType, Amenities } from
import {ServerComService} from "./serverComService";
import {cityListUrl, venueFilterDataOptionsUrl} from 'app/backendUrls';
@Injectable()
export class DynamicFormDataService implements OnInit {
constructor(private serverComService: ServerComService){}
cityList: City[]= [];
neighborhood = [];
cuisine = [];
privacy = [];
venueType = [];
amenities = [];
cityGet(){
if(this.cityList.length > 0){
return this.cityList;
}
this.cityList = this.serverComService.getService(cityListUrl)
return this.cityList;
}
ngOnInit(){
this.cityGet();
}
}
がある輸入のいくつかのタイプミスが、それらを無視することができますこれは私が最初に理解に取り組んでいます。
cityList
配列のデータを使用したい場合は、その配列を反復して呼び出し、city.name値の位置を指定しますか?
都市リストの配列に追加する場合はどうなりますか?
私は、その引数としてフォームデータを受け取り、 ので、おそらく機能、そして
c = new City('Pound Town');
cityList.push(c);
私は場合によってはプッシュと呼ばれるか、HTTPメソッドを置くサービス街のコンストラクタを呼び出す必要があります新しいものを更新または作成する。
メインと総質問は、その後、私はJSONに
またはJavaScriptのオブジェクトをオブジェクトのJavascriptに JSONを変換スキップし、この過程で行方不明です何がありますか?
私は全体的な実行で正しいですか?変数のタイプをjsonの文字列にして、クライアントコードで使用するオブジェクトの適切な型に変換しますか?
私はそれを返す前に観測可能なものを購読していますが、それはそのaysncの部分を世話しませんでしょうか? –
[await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)を使用する以外は、非同期操作を「処理する」ことはできません。あなたのコードでは、httpリクエストからの応答が返される前に 'value'を返すので、' value'は空の配列を持ちます。 –
ああ参照してください。購読は実際には、クリックボタンやメッセージングアップデートなどの非同期タスクに一覧表示する例で使用されます。 –