Saya mencoba mengizinkan pengguna untuk mengedit daftar item dengan menggunakan ngRepeat
dan ngModel
. ( Lihat biola ini .) Namun, kedua pendekatan yang saya coba menyebabkan perilaku aneh: satu tidak memperbarui model, dan yang lain mengaburkan formulir pada setiap tuts bawah.
Apakah saya melakukan sesuatu yang salah di sini? Apakah ini bukan kasus penggunaan yang didukung?
Ini kode dari biola, disalin untuk kenyamanan:
<html ng-app>
<head>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrap-combined.min.css" rel="stylesheet">
</head>
<body ng-init="names = ['Sam', 'Harry', 'Sally']">
<h1>Fun with Fields and ngModel</h1>
<p>names: {{names}}</p>
<h3>Binding to each element directly:</h3>
<div ng-repeat="name in names">
Value: {{name}}
<input ng-model="name">
</div>
<p class="muted">The binding does not appear to be working: the value in the model is not changed.</p>
<h3>Indexing into the array:</h3>
<div ng-repeat="name in names">
Value: {{names[$index]}}
<input ng-model="names[$index]">
</div>
<p class="muted">Type one character, and the input field loses focus. However, the binding appears to be working correctly.</p>
</body>
</html>
</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>
angularjs
angularjs-ng-repeat
angularjs-ng-model
Nick Heiner
sumber
sumber
Jawaban:
Ini tampaknya menjadi masalah yang mengikat.
Nasihatnya jangan terikat pada primitif .
Anda melakukan
ngRepeat
iterasi terhadap string di dalam koleksi, saat itu harus melakukan iterasi terhadap objek. Untuk memperbaiki masalah Andajsfiddle: http://jsfiddle.net/jaimem/rnw3u/5/
sumber
Menggunakan Angular versi terbaru (1.2.1) dan lacak oleh
$index
. Masalah ini telah diperbaikihttp://jsfiddle.net/rnw3u/53/
sumber
Anda masuk ke situasi yang sulit ketika perlu untuk memahami cara kerja cakupan , ngRepeat dan ngModel dengan NgModelController . Coba juga gunakan versi 1.0.3. Teladan Anda akan bekerja sedikit berbeda.
Anda cukup menggunakan solusi yang disediakan oleh jm-
Tetapi jika Anda ingin menghadapi situasi tersebut lebih dalam, Anda harus memahami:
Bagaimana contoh Anda "Mengikat ke setiap elemen secara langsung" bekerja untuk AngularJS 1.0.3:
'f'
ke masukan;ngModelController
perubahan model untuk lingkup item (nama array tidak berubah) =>name == 'Samf'
,names == ['Sam', 'Harry', 'Sally']
;$digest
loop dimulai;ngRepeat
mengganti nilai model dari item scope ('Samf'
) dengan nilai dari nama yang tidak berubah array ('Sam'
);ngModelController
merender masukan dengan nilai model aktual ('Sam'
).Cara kerja contoh "Mengindeks ke dalam array":
'f'
ke masukan;ngModelController
mengubah item dalam namesarray
=> `names == ['Samf', 'Harry', 'Sally'];ngRepeat
tidak dapat ditemukan'Samf'
di cache;ngRepeat
membuat ruang lingkup baru, menambahkan elemen div baru dengan masukan baru (itulah sebabnya bidang masukan kehilangan fokus - div lama dengan masukan lama diganti dengan div baru dengan masukan baru);Anda juga dapat mencoba menggunakan AngularJS Batarang dan melihat bagaimana mengubah $ id dari ruang lingkup div dengan masukan yang Anda masukkan.
sumber
Jika Anda tidak memerlukan model untuk memperbarui dengan setiap penekanan tombol, cukup ikat ke
name
dan kemudian perbarui item array pada peristiwa blur:sumber
ng-model="names[$index]"
... Saya tahu ini solusinya, tetapi berhasil ;-)Saya baru saja memperbarui AngularJs ke 1.1.2 dan tidak ada masalah dengan itu. Saya kira bug ini telah diperbaiki.
http://ci.angularjs.org/job/angular.js-pete/57/artifact/build/angular.js
sumber
Masalahnya tampaknya pada cara
ng-model
bekerja denganinput
dan menimpaname
objek, membuatnya hilangng-repeat
.Sebagai solusinya, seseorang dapat menggunakan kode berikut:
Semoga membantu
sumber
Saya mencoba solusi di atas untuk masalah saya itu berfungsi seperti pesona. Terima kasih!
http://jsfiddle.net/leighboone/wn9Ym/7/
Ini versi saya:
dan HTML saya
sumber
bagaimana melakukan sesuatu seperti:
Dan dalam elemen inspektur saya menjadi:
sumber