1

我对 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 上的侦听器。

4

0 回答 0