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 のリスナーに影響を与えないようです。