2016-05-20 33 views
0

私はこれに対する解決策を見つけるのに苦労しています。角度2のモデルフィールドの簡単な数学

私は以下のモデルを持っており、サービスを通じて約束しています。

export class Something { 
    id: number; 
    someTime: string; 
    items: [ 
    { 
    id: number; 
    description: string; 
    unit: string; 
    portion: number; 
    std: number; 
    } 
    ] 
} 

それはモックデータを有する:

const SOMETHINGS: Something[] = [ 
{ 
    id: 0, 
    someTime: 'Now', 
    items: [ 
     { 
     id: 0, 
     description: 'A', 
     unit: 'ml', 
     portion: 275, 
     std: 64 
     }, 
     { 
     id: 1, 
     description: 'B', 
     unit: 'g', 
     portion: 50, 
     std: 378 
     }, 
     .... 
    ] 
    } 
] 

実際の値は無関係であるが、私は各部分とstd値にアクセスする必要があります。それらを掛け合わせて、最後にそれらを合計する。そのよう

275 * 64 = 17600 
50 * 378 = 18900 
total = 36500 

私のコンポーネント内の私はそうのようなローカル配列に返されたデータを割り当てました。

something: Something[] = []; 

    constructor(private somethingService: SomethingService) {} 

    ngOnInit(){ 
    this.getSomething(); 
    } 

    getSomething(){ 
    this.somethingService.getSomething().then(something => this.something = something); 
    } 

私は* ngFor型アプローチを使用することはできませんので、この値は私のテンプレートの繰り返しセクション内ではありません。私は単純に各項目と抽出液にアクセスする方法がわからない

calcTotal(){ 
let totals:array<Number>; 
let gross:number = 0; 

this.something.forEach((items) => total.push(items.portion * items.std)); 

totals.forEach((total:number) => gross += total)); 

return { 
    total: totals; 
} 

}

しかし、これは動作しません..:

のようなものを使用して論理的と思われます2つの値を乗算し、後で次のペアを抽出するなどして保存します。最後にすべての結果をまとめ、それらを合計してビューに渡します。

ご協力いただければ幸いです。

スティーブ

答えて

1

、あなたのデータを取得し、あなたのサービスから、それに加入するとき、あなたがこれを行うことができます。

this.somethingService.getSomething() 
.then((data) => { 
    this.data = data; 
    this.totals = this.calculateValues(data); 
}); 

// With the model you have up there it would look like this. 
calculateValues(data){ 
    let total = 0; 
    data.map(somethingObj => { 
    somethingObj.items.map(itemObj => { 
     total += (itemObj.portion * itemObj.std); 
    }) 
    }) 
    return total; 
} 
+0

ご回答ありがとうございます。 2つのポイント - 私は私のサービスでプロミスを使用しています。私はサブスクライブメソッドに慣れていないので、あなたのメソッドは何も返されないようです。私はここで何かを見逃していますか? – Steve

+0

上記を忘れて、類似の数学的演算子のユーティリティクラス内でcalculateValuesメソッドを使用しました。 – Steve

関連する問題