1

AngularJS とコンパイル機能に非常に奇妙な問題があります: http://plnkr.co/edit/7W9AbpaLqsYCecOWdIlz?p=preview

簡単な $compile 構造を作成したので、さまざまな html テンプレートを動的に挿入できます。

「INIT」イベントで BodyController を調べると、状態が変更され、UI が表示されます。

uiService.changeState("LOGIN");
uiService.showUI("LOGIN_VIEW"); 
uiService.changeState("GAME");
//Change state - show test one,
uiService.showUI("TEST1_VIEW");

ログインに戻って GAME に戻った後、「Test1」が 3 回表示され、「Test2」が 1 回表示されますが、「Test1」だけが 1 回表示されるはずです。

また、プリコンパイル ディレクティブは破棄も実行もされません。

毎回 scope().$destroy イベントを発生させていますが、コアがこれを正しく認識していないようですか?

誰かが私を助けてくれることを願っています。ありがとう

編集: クロスリンク: https://github.com/angular/angular.js/issues/9190

更新: 問題が見つかりましたが、解決方法がわかりません:

コンパイル後:

angularScope = angular.element(document).scope();
$compile(controlEle)(angularScope);

angularScope ($rootScope) はリスナーを以下に追加します。

$stateChangeSuccess

この $stateChangeSuccess-Listener はクリアされていません

$state.go

自分でクリアすればバグはなくなりますが、これは正しいケースではないでしょうか?

angularScope.$$listeners.$stateChangeSuccess = [];
angularScope.$$listeners.$viewContentLoading = []; 

子スコープの $destroy-event は、$rootScope のリスナーに影響を与えないようです。

4

0 に答える 0