2017-02-09 11 views
0

このデータは、Ionic 2(Angular 2)でHTTP Get Requestを使用してWordpressバックエンドから保存しようとしています。配列内のオブジェクトを角2で格納する

私はこのデータ構造を受けています、データの

コンソールログは、私がの配列に(menu_1とmenu_2)のメニューのように、このデータを保存しようとしている

enter image description here

を対応しました - メニュー、カテゴリのカテゴリのカテゴリ、料理の配列の料理...

どうすればいいですか?

私はパイプを使用して表示または反復したくないのですが、私はそれらを扱いやすいように配列に格納したいだけです。現時点では

私のコードは次のようである:

home.ts:

私は、HTTPを取得呼び出すための注射クラス(グローバル)を持っているが、私は私の自宅にgetMenus機能に加入しません.TSコンポーネント:

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Globals } from '../../providers/globals'; 

@Component({ 
    selector: 'page-home', 
    providers: [Globals], 
    templateUrl: 'home.html' 
}) 
export class HomePage { 
    menus: any; 

    constructor(public navCtrl: NavController, public globals: Globals) { 
    this.getMenus(); 
    } 

    getMenus() { 
    this.globals.getMenus().subscribe(
     data => { 
     console.log(data); 
     this.menus = data; 
     }, 
     err => { console.log(err) } 
    ); 
    } 
} 

そして、私は、現時点では、メニューと呼ばれるクラスを作成しているが、非常に簡単です:

import { Injectable } from '@angular/core'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class Menu { 
    name: any; 
    categories: any; 

    constructor() { 
    this.name = this.name; 
    this.categories = this.categories; 
    } 
} 

ここで、nameはオブジェクトの基本フィールドです(key:name、value: "Today's menu"、カテゴリはcat_1、cat_2(menu_1オブジェクト内に2つのオブジェクトがあり、各オブジェクトにはより多くのオブジェクト(dish_1、dish_2 ...)が含まれています)。

私のアイデアは、クラスメニュー、クラスCategory、クラスDishの各クラスのクラスを作成することです。しかし、私はどのように私はこのクラスでこのオブジェクトを格納を開始することができますの任意のアイデアを持っています。 :S

Greetings!

+1

"私はこのデータを保存しようとしています" - どのように試していますか?あなたが持っているコードを質問に追加してください –

+0

私は多くのことを試みましたが、誰も働いていませんでした。たぶん「私がやっている」というより、「私が欲しい」と言う方が正しいかもしれません... –

+0

質問にあなたが試したことを含めるべきです。あなたはあなたが持っているコードと、あなたの質問に答えるのを容易にする何かを含めるべきです。 –

答えて

0

問題に直面している場合に役立ち、何かのように:

interface Dish { 
     Name: string; 
     Description: string; 
     Thumbnail: string; 
} 

interface Category { 
     [name: string]: Dish; 
} 

type ServerResponse = { 
     [name: string]: { [name: string]: Category; } & { name: string }; 
} 

あなたがすることができます。このデータから、クラスを作成する場合:

class Menu { 
     name: string; 
     categories: { [name: string]: Category }; 

     constructor(data: { [name: string]: Category; } & { name: string }) { 
      this.name = data.name; 
      this.categories = {}; 

      Object.keys(data).forEach(name => { 
        if (name !== "name") { 
         this.categories[name] = new Category(data[name]); 
        } 
      }); 
     } 
} 

(data: ServerResponse) => { 
     this.menus = {}; 
     Object.keys(data).forEach(name => { 
      this.menus[name] = new Menu(data[name]); 
     }); 
} 

をまたCategoryクラスとすべてを作成する必要がありますが、それはアイデアです。

+0

ニースの答え!私はTypescriptの初心者ですが、私はそれをやろうとしています。もう1つの質問...これをタイスクリプトでどのように実装できますか? タイプServerResponse = { [name:string]:{[name:string]:カテゴリ; }&{name:string}; } イオン2では、このエラーが発生します。「クラスは、別のクラスまたはインターフェイスしか実装できません。 –

+0

あなたは何をしようとしていますが、そのエラーが発生しますか?その行はコンパイラでうまくいきます。あなたは 'ServerResponse'を拡張しようとしていますか? –

+0

はい、私はこれらの3つのインターフェイスでクラスメニュー、カテゴリ、料理、ファイルdata-services.tsを作成しました。私は、サクセブからhttpリクエストを受けたクラスでServerResponseを実装しようとしています。それは間違っていますか? –

0

何をしようとしていますか?

あなたがしようとしているのは、ノーマライズのデータです。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

は、あなたがそれをどのように実行する必要があります。

ここで正規化された状態がどのように見えるかだ(?!?あなたがもしそうならたぶんNgrx、これは素晴らしいアイデアを正規化することであるReduxのパターンを使用していますか)?

他にも多くのリクエストがある場合は非常に困難になるか、schemaにデータを記述してnormalizrを使用してデータを正規化してください。

0

開始する場所がわからない場合は、このアプローチを試すことができます。まず、モデルの作成:あなたのコンポーネントで

export class DummyModel { 
menu: any; 
cat: any; 
dish: any; 
... 
//you can replace any with the type expected (string, number, etc) 
} 

を、あなたはあなたのdummyModelをインポートします。また、データ

import { DummyModel }    from '../dummy.model'; 
/... 
dummyModel: DummyModel = dummyData; 

を設定し、@Nitzan Tomerは、助言ここにあなたのコードと人々をすることができ書こうと考えますあなたが最初に行うことは、サーバーから受信したデータのためのインターフェイスを作成することです

+0

はい。これは多かれ少なかれ私が望むものです。 データは私に他のオブジェクトを含むオブジェクトを返します。クラス "メニュー"では、名前変数とカテゴリ( "cat_1"と "値は料理を含むオブジェクト全体であるため、「cat_2」)。 私はうまく説明しているかどうか分かりませんが、ごめんなさい。 –

関連する問題