2012-10-17 31 views
5

Yanlış bir şey yaptığımı hissediyorum, ancak bu davranış tuhaf görünüyor. Dinamik olarak denetleyicideki verilere dayanan bir tablo oluşturur. Tablodaki hücrelerden birini girdiğimde, odağı hemen bir sonraki hücreye değiştirir ve karakteri de ekler.Angularjs tablo hücresi yineleme

Konuyu jsfiddle olarak yeniden üreten çok basit bir örneğim var.

http://jsfiddle.net/rgaskill/Aksec/15/

<div ng-app="miniapp"> 
<div ng-controller="Matrix"> 
    <h1>Enter a value in the fist cell.</h1> 
    <table> 
<thead> 
    <tr> 
     <th>Row Name</th> 
     <th>0</th> 
     <th>1</th> 
     <th>2</th> 
     <th>3</th> 
     <th>4</th> 
     <th>5</th> 
    </tr> 
</thead> 
<tbody> 
    <tr ng-repeat="(row, values) in valueMap"> 
     <td>{{row}}</td> 
     <td ng-repeat="(col, val) in values" ><input type="text" ng-model="valueMap[row][col]"></input></td> 
    </tr> 

</tbody> 
</table>      
</div>  
</div>​ 
bu garip davranışa neden olan nedir
var app = angular.module('miniapp', []); 

function Matrix($scope) { 
$scope.valueMap = { 
    aRow: { 
     '0': '', 
     '1': '', 
     '2': '', 
     '3': '', 
     '4': '', 
     '5': '' 
    } 
    }; 
}​ 

?

cevap

4

Tamam, sorunu buldum. Bu yazı biraz netlik kattı.

ngRepeat onu kopyalar öğesinin altında yerel bir kapsam içine ilkel unrolls

https://groups.google.com/forum/#!topic/angular/VD77QR1J6uQ/discussion

. Sonra ng modeli ona bağlanır. Modeli güncellediğinizde, orijinali değil, bir kopyayı güncelliyorsunuz demektir. ancak orijinali güncellediğinizde, öğe dizisinde bir şeyin değiştiğini fark etmek için tekrarlayıcıyı kullanır ve sonra ng modelini yeniden oluşturur, bu da ti'nin öğeleri yeniden kopyaladığını gösterir. Bu yüzden garip davranış ama beklenen.

Kısa yanıt: ngRepeat içindeki ilkel öğelere hiçbir zaman yineleme ve giriş yapma, referansın bir kopyasını oluştururken ve herhangi bir güncelleştirme özgün konum yerine yerel kapsama yazılır.

ve şimdi

http://jsfiddle.net/rgaskill/Aksec/16/

çalışır keman güncellenmiş
İlgili konular