Maison > Questions et réponses > le corps du texte
最近在做一个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里面完美的实现了点击弹框后才执行脚本,
这一点没想明白是为什么,有没有高人可以解答?
PHPz2017-05-15 16:52:55
Je ne comprends pas comment résoudre le bug. Quant au processus d'analyse d'angular, je peux expliquer :
Bien que ce que nous voyons dans la visionneuse DOM soit le résultat après l'analyse angulaire, le navigateur charge d'abord l'élément dom, puis angulaire l'exécute pour trouver diverses instructions, puis analyse les résultats.
Angular a donc plusieurs bizarreries : ng-bind remplace {{ expression }} pour résoudre le problème de clignotement des accolades, vous ne pouvez pas définir d'instructions href à utiliser sur une balise, et d'autres raisons similaires sont les mêmes.
ng n'est pas un modèle d'arrière-plan. Pour le langage d'arrière-plan, le modèle consiste en une analyse et un épissage de chaînes, mais ng s'exécute dans le navigateur. HTML deviendra d'abord un élément dom. ng ne manipule pas de chaînes, mais manipule dom. éléments.
世界只因有你2017-05-15 16:52:55
Vous devriez avoir des modèles de contrôleurs liés dans ng-if et ng-show, n'est-ce pas ?
En regardant votre processus de solution, je suppose :
ng-if est par défaut vrai
La valeur par défaut de ng-show est false
Ainsi, lors de l'utilisation de ng-if, le script dans le modèle sera exécuté avant le calcul du modèle
Mais cela peut aussi être une situation particulière sur ie8
J'ai une suggestion, ne mettez pas le script directement dans le modèle, par exemple, mettez-le dans le contrôleur du modèle. Vous pouvez également utiliser ng-if de cette façon
.