私は現在、angular js プロジェクトに取り組んでいます。今朝は午前中ずっと虫のことを心配していました、
つまり、ng-ifではポップアップボックスが表示されますが、そのポップアップボックスの指示はテンプレート内にスクリプトが存在しますが、他のブラウザではスクリプトが実行されません。 IE8。
script タグに defer 属性を追加するなど、IE8 でのスクリプト実行に関する多くの問題を確認しましたが、実際の問題は解決されませんでした。
後でわかったのですが、スクリプトが実行できなかったのではなく、メインページがロードされたときにスクリプトが実行されていました(ng-if が false で、ポップアップ ボックスは表示されませんでした)。
インターネット上では、ng-if は dom を削除して dom を生成するが、ng-show は表示属性を変更するだけであると言われています。
ng-if="true" が設定されるまで、dom をロードしてスクリプトを実行すべきではないのは当然です。
しかし、ng-if を ng-show に変更すると、IE8 ではポップアップ ボックスをクリックした後にスクリプトが実行されるようになりました。
なぜこれが起こっているのかわかりません、誰か教えてもらえますか?
バグの解決方法がわかりません。 angular の解析プロセスについては、次のように説明できます。
DOM ビューアに表示されるのは angular 解析後の結果ですが、ブラウザは実際には最初に dom 要素をロードし、次に angular がそれを実行してさまざまな命令を見つけ、結果を解析します。
Angular にはいくつかの癖があります。ng-bind は中かっこの点滅の問題を解決するために {{expression }} を置き換えます。タグで使用する href 命令を定義できません。その他の同様の理由も同じです。
ng はバックグラウンド言語のテンプレートではなく、さまざまな文字列の解析と結合を行いますが、HTML は最初に dom 要素として文字列を操作します。
ng-if と ng-show でコントローラー モデルをバインドする必要がありますよね?
解決プロセスを見ると、次のように推測されます:
ng-if のデフォルトは true です
ng-show のデフォルトは false です
したがって、ng-ifを使用すると、モデルが計算される前にテンプレート内のスクリプトが実行されます
しかし、これもie8の特殊な状況かもしれません
提案があります。スクリプトをテンプレートに直接配置しないでください。たとえば、テンプレートのコントローラーに配置することもできます。このように ng-if を使用することもできます。