Saya sedang mengusahakan projek js sudut. Saya telah bimbang tentang pepijat sepanjang pagi ini,
Iaitu, kotak timbul muncul dalam ng-jika Arahan kotak timbul merujuk kepada templat Tiada masalah dalam pelayar lain, tetapi skrip tidak dilaksanakan di bawah IE8.
Saya menyemak banyak masalah dengan pelaksanaan skrip dalam IE8, termasuk menambah atribut tangguh pada teg skrip, tetapi ia tidak menyelesaikan masalah sebenar.
Kemudian saya mendapati bahawa bukan skrip tidak boleh dilaksanakan, tetapi skrip itu dilaksanakan apabila halaman utama dimuatkan (ng-if adalah palsu dan kotak pop timbul tidak muncul).
Dikatakan di Internet bahawa ng-if akan mengalih keluar dom dan menjana dom, manakala ng-show hanya menukar atribut paparannya,
Adalah wajar bahawa dom tidak boleh dimuatkan dan skrip dilaksanakan sehingga ng-if="true" ditetapkan?
Tetapi selepas menukar ng-if kepada ng-show, saya mendapati bahawa masalah itu telah diselesaikan secara tiba-tiba Dalam IE8, skrip telah dilaksanakan selepas mengklik kotak pop timbul dengan sempurna
Saya tidak faham mengapa ini berlaku, boleh sesiapa beritahu saya?
Saya tidak faham cara menyelesaikan pepijat Bagi proses penghuraian sudut, saya boleh menerangkan:
Walaupun apa yang kita lihat dalam pemapar DOM ialah hasil selepas penghuraian sudut, penyemak imbas sebenarnya memuatkan elemen dom dahulu, dan kemudian sudut melaksanakannya untuk mencari pelbagai arahan dan kemudian menghuraikan hasilnya.
Jadi sudut mempunyai beberapa keanehan: ng-bind menggantikan {{ ungkapan }} untuk menyelesaikan masalah kelipan pendakap kerinting, anda tidak boleh menentukan arahan href untuk digunakan pada teg dan sebab lain yang serupa adalah sama.
ng bukan templat latar belakang Untuk bahasa latar belakang, templat ialah penghuraian dan penyambungan rentetan, tetapi ng dijalankan dalam penyemak imbas terlebih dahulu akan menjadi elemen dom, tetapi ia memanipulasi dom elemen.
Anda sepatutnya mempunyai model pengawal terikat dalam ng-if dan ng-show, bukan?
Melihat proses penyelesaian anda, saya rasa:
ng-jika lalai kepada benar
Nilai lalai ng-show adalah palsu
Jadi apabila menggunakan ng-if, skrip dalam templat akan dilaksanakan sebelum model dikira
Tetapi ini mungkin juga situasi istimewa pada ie8
Saya ada cadangan, jangan letak skrip terus dalam templat, contohnya, letak dalam pengawal templat Anda juga boleh menggunakan ng-jika dengan cara ini