我对 AngularJS 和编译功能有一个非常奇怪的问题: http ://plnkr.co/edit/7W9AbpaLqsYCecOWdIlz?p=preview
我写了一个简单的 $compile 结构,所以我可以动态插入不同的 html 模板。
如果您查看 BodyController,您将在“INIT”事件中,我正在更改我的状态并显示 UI。
uiService.changeState("LOGIN");
uiService.showUI("LOGIN_VIEW");
uiService.changeState("GAME");
//Change state - show test one,
uiService.showUI("TEST1_VIEW");
在我跳回登录并改回 GAME 后,他显示了 3 次“Test1”,以及 1 次“Test2”,但应该只显示“Test1”一次。
此外,预编译指令不会被破坏并被执行。
我每次都在触发 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 上的侦听器。