2017-01-04 8 views
1

私は2つのオブジェクトを含むオブジェクトを持っています。複雑なオブジェクト上の角度リピート

それらのオブジェクトの各2つのオブジェクトの配列含まれています。私は最初の値をプリントアウトすることができますCASE #1

<ul> 
    <li ng-repeat="item in ctrl.mainArray track by item.insideArray[$index]> 
    <!-- CASE #1 --> 
    First value: {{item.insideArray[0].value1}} 

    <!-- CASE #2 --> 
    First value: {{item.insideArray[$index].value1}} 
    </li> 
</ul> 

ctrl.mainArray = { 
    outsideObject_1: { 
    insideArray = [ 
     insideObject_1: { value1: 'someValue', value2: 'someOtherValue' }, 
     insideObject_2: { value1: 'someValue', value2: 'someOtherValue' } 
    ] 
    }, 
    outsideObject_2: { 
    insideArray = [ 
     insideObject_1: { value1: 'someValue', value2: 'someOtherValue' }, 
     insideObject_2: { value1: 'someValue', value2: 'someOtherValue' } 
    ] 
    }; 
}; 

私は私のテンプレートからinsideObject_xの値を表示したいの、各insideArrayの最初のオブジェクトから。私が最初insideArrayの最初のオブジェクトから、最初の値をプリントアウトすることができますCASE #2の各insideObject_x

からvalue1を印刷したいです。

私は間違っていますか?私はvalue1、4つの異なる時間を印刷する必要があります。

+0

あなたをいわゆる配列は有効なJS構文ではありません。配列ではなくオブジェクトですか? – qqilihq

+0

右 - 私の間違い。 「メインコンテナ」はオブジェクトであり、配列ではありません。私は私の質問でその構文エラーを修正する - しかし、まだ助けを求める。 – bruh

+1

完全な実例を作成できますか? jsfiddle/snippet – Dekel

答えて

2

出力として正確に何をしたいのか分かりませんでしたが、insideArrayの中の各オブジェクトのvalue1プロパティの値を印刷したいと思うなら、スクリプト側のロジックを処理する必要があると思います。

HTML

<ul ng-app="myApp" ng-controller="mainController as mainCtrl"> 
    <li ng-repeat="value in mainCtrl.values track by $index"> 
    First value: {{value}} 
    </li> 
</ul> 

のJavaScript(角)

(() => { 
angular.module("myApp", []) 
    .controller("mainController", function() { 
     let ctrl = this; 

     ctrl.mainObj = { 
      outsideObject_1: { 
       insideArray : [ 
        { value1: 'someValue', value2: 'someOtherValue' }, 
        { value1: 'someValue', value2: 'someOtherValue' } 
       ] 
      }, 
      outsideObject_2: { 
       insideArray : [ 
        { value1: 'someValue', value2: 'someOtherValue' }, 
        { value1: 'someValue', value2: 'someOtherValue' } 
       ] 
      } 
     }; 

     ctrl.values = []; 

     for (let obj in ctrl.mainObj) { 
      for(let val of ctrl.mainObj[obj].insideArray) { 
       ctrl['values'].push(val.value1); 
      } 
     } 
}); 
})(); 

CodePen:http://codepen.io/cod3rguy/pen/ggbMKz?editors=1010


あなたはinsideArray s内のオブジェクトのすべてのプロパティ値(value1value2など)をしたい場合、あなたはslightyなど、上記のコードでvalues配列移入されたロジック変更することができます -

for (let obj in ctrl.mainObj) { 
    for(let val of ctrl.mainObj[obj].insideArray) { 
     for (let v in val) { 
      ctrl['values'].push(val[v]); 
     } 
    } 
} 
+0

ES6なしでこれを行うにはどうすればよいですか?私は私のプロジェクトでそれを使用することができません。具体的に 'for ... of'と書かれている行を、ES5と同等のものにどのように「ダウングレード」できますか? – bruh

+0

@bruhまあ、for for ... ofの代わりに 'forEach()'を使うことができます。上記のCodePenに実装を追加しました。 – CoderGuy