Oleh kerana saya baru sahaja berhubung dengan Angular, beberapa konsep masih sangat kabur, saya cuba mencari jawapan kepada soalan ini melalui Google, tetapi tidak menemui jawapan yang sesuai, jadi saya ingin bertanya kepada anda di sini ialah kod kasar:
<p ng-repeat="item in list" class="need-another-js"></p>
<script>
$('.need-another-js').click(function(){
// do something
})
</script>
Jika ng-repeat
dialih keluar, kesan kod JS boleh dicapai, tetapi selepas menambah ng-repeat
, kesannya tidak wujud Adakah ini kerana masalah skop sudut?
Ini tiada kaitan dengan skop, ia hanyalah bentuk ralat biasa
jquery
=>angular
.AngularJS
arahan, sebagai API "deklaratif", sangat berbeza daripada API "imperatif"jquery
Mudah untuk membuat kesilapan apabila anda mencampurkannya.Ralat akal sehat asas,
id
digunakan untuk menunjukkan keunikan unsur, tetapi anda menggunakannya padang-repeat
, yang bermaksud mungkin terdapat beberapaid
elemen, kesemuanya adalahneed-another-js
. Ini tiada kena mengena denganjquery
atauangular
, ia semata-matahtml
kurang pengetahuanng-repeat
, seperti arahan yang diberikan olehangular
, perlu melalui prosesangular
dancompile
linking
Akibatnya, apabila$('#need-another-js').click
anda mendaftarkan acara untuk elemen#need-another-js
, elemen ini sebenarnya belum dijana menjadiangular
olehDOM
, dan ini adalah kunci untuk tidak berkuat kuasa.Hanya sebagai contoh anda, anda boleh membuat pengubahsuaian berikut untuk menjadikannya berkesan:
Walaupun saya tidak mengesyorkan cara penulisan ini, kerana anda memilih untuk mencampurkan "imperatif" dan
声明式
API, anda mesti mempunyai alasan anda.Tambahan:
Mengenai cara
angular
berfungsi, saya rasa ia berguna untuk pelajar yang baru mula membaca pengenalan ini di laman web rasmi:Alamat dokumen: konsep
angular mempunyai acara mengikat yang menyokong ng-klik
Anda boleh cuba menulisnya seperti ini
Semasa saya belajar Angular, saya bertukar terus dari jq ke sudut boleh melakukan semua yang jq boleh lakukan
ng-repeat adalah untuk menambahkan elemen dom secara dinamik Jika anda menggunakan kaedah klik untuk mengikat acara kepada elemen yang ditambah secara dinamik, ia tidak akan dicetuskan. Jika anda suka menggunakan jquery, gunakan kaedah yang dicadangkan oleh leftstick, tetapi disyorkan untuk menggunakan kaedah sudut yang dicadangkan oleh mumofa