2016-11-25 67 views
1

我目前正在嘗試使用AngularJS存儲一些數據。我有一個包含不同部分的表格,以及行和列。ng-model與多維數組

每個字段都有一個下拉列表,只包含字母「O」,「T」或「E」。我想要的是將這些值存儲在數組中:[section] [row] [column] - 例如[0] [0] [0] =「E」。

這是我試圖存儲值:

<select id="{{$parent.$parent.$index}}_{{$parent.$index}}_{{$index}}" 
    ng-change="changePollValue()" 
    ng-model="selectedValues[$parent.$parent.$index][$parent.$index][$index]" ...> 

不幸的是,AngularJS是創造一個一維數組的內部嵌套對象。就像這樣:

"selectedValues" : [ { 
       "0" : { 
       "0" : "E", 
       "1" : "T", 
       "2" : "O", 
       "3" : "E", 
       "4" : "T" 
       }, 
       "1" : { 
       "0" : "O", 
       "1" : "E", 
       "2" : "T", 
       "3" : "O", 
       "4" : "E" 
... 

「selectedValues」 被初始化像$scope.selectedValues = [];

對此有何建議?

回答

1

它看起來像你真正想要的是一個矩陣,這不是你如何在JavaScript中產生矩陣。這是怎樣一個三維矩陣產生:

$scope.matrix = [[[]]]; 

這樣你有,有一個孩子是另一個數組(這使得一個簡單的矩陣),然後父陣列,這孩子還有另一個子陣列(父親數組的孫輩),然後變成三維數組。看一看一些兒孫三維陣列的定義:

$scope.matrix = [ 
    [ 
    [ 
     { selectedOption: '0-0-0' }, 
     { selectedOption: '0-0-1' }, 
     { selectedOption: '0-0-2' } 
    ], [ 
     { selectedOption: '0-1-0' }, 
     { selectedOption: '0-1-1' }, 
     { selectedOption: '0-1-2' } 
    ] 
    ], [ 
    [ 
     { selectedOption: '1-0-0' }, 
     { selectedOption: '1-0-1' }, 
     { selectedOption: '1-0-2' } 
    ], [ 
     { selectedOption: '1-1-0' }, 
     { selectedOption: '1-1-1' }, 
     { selectedOption: '1-1-2' } 
    ] 
    ] 
]; 

在這種情況下,第一個數字涉及父索引,第二個數字(連字符之後)涉及子索引和所述第三索引(最後一個連字符後)與孫子指數有關。因此,1-1-1指向第二個父母(0基礎指數),並指向第二個孩子和第二個孫子。

我在codepen to illustrate how to handle this上做了一個例子。

+0

謝謝!我不知道[[[]]]語法來創建一個矩陣。我嘗試了Java語法,但沒有奏效。 – DCH

+0

沒問題@DCH。如果這真的幫助了你並且是正確的答案,你可以將其標記爲如此。玩的開心。 –