最近在做一个angular js的项目。今早一个早上都在为一个bug发愁,、
就是ng-if出现一个弹框,弹框的指令中引用了一个模板,模板中有script脚本,在其他浏览器都没问题,就是在IE8下脚本不执行。
查了很多IE8执行脚本的问题,包括在script标签加defer属性,但是不解决实际问题。
后来发现并不是脚本不能执行,而是在主页面加载时(ng-if为false弹框没出现)就执行过了脚本。
网上都说 ng-if会移除dom,生成dom,而ng-show只是改变其display属性,
按理说不应该是ng-if="true"的时候才会加载dom,才会执行脚本才对?
但是把ng-if改成ng-show以后发现问题突然解决了,在IE8里面完美的实现了点击弹框后才执行脚本,
这一点没想明白是为什么,有没有高人可以解答?
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