angular.js - ng-if和ng-show在IE8下的问题
天蓬老师
天蓬老师 2017-05-15 16:50:55
0
2
639

最近在做一个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里面完美的实现了点击弹框后才执行脚本,
这一点没想明白是为什么,有没有高人可以解答?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(2)
PHPzhong

バグの解決方法がわかりません。 angular の解析プロセスについては、次のように説明できます。

DOM ビューアに表示されるのは angular 解析後の結果ですが、ブラウザは実際には最初に dom 要素をロードし、次に angular がそれを実行してさまざまな命令を見つけ、結果を解析します。

Angular にはいくつかの癖があります。ng-bind は中かっこの点滅の問題を解決するために {{expression }} を置き換えます。タグで使用する href 命令を定義できません。その他の同様の理由も同じです。

ng はバックグラウンド言語のテンプレートではなく、さまざまな文字列の解析と結合を行いますが、HTML は最初に dom 要素として文字列を操作します。

いいねを押す +0
世界只因有你

ng-if と ng-show でコントローラー モデルをバインドする必要がありますよね?

解決プロセスを見ると、次のように推測されます:
ng-if のデフォルトは true です
ng-show のデフォルトは false です

したがって、ng-ifを使用すると、モデルが計算される前にテンプレート内のスクリプトが実行されます
しかし、これもie8の特殊な状況かもしれません

提案があります。スクリプトをテンプレートに直接配置しないでください。たとえば、テンプレートのコントローラーに配置することもできます。このように ng-if を使用することもできます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート