我有以下用例 - 我提供了一个对话服务,我根据上下文放置不同的内容。在服务方法中,我手动编译了一个 dom 元素并使用它来使用 jquery ui 显示对话框。代码如下:
var _view = jQuery('<div id="config-dialog"><span ng-include="\'' + $scope.configView + '\'" ng-controller="' + $scope.configController + '"></span></div>');
var _compiled = $compile(_view.contents())($scope);
然后我触发一个范围事件,该事件应该由控制器中定义的范围函数处理
$scope.$broadcast('config-open', $scope.config);
然后我打开对话框,用户执行某些操作并关闭对话框。当对话框关闭时,我从 DOM 中删除了“config-dialog”元素。像这样:
$(this).dialog("destroy");
jQuery('#config-dialog').remove();
但是,下次打开对话框并实例化一个新控制器时,我看到“配置打开”被处理了两次,当再次打开对话框时,它被处理了 3 次。这意味着附加到我动态创建的 ng-include 的范围不会被破坏。我用 Batarang 进行了调试,发现 ng-include 创建的子范围确实没有被清理。AFAIK AngularJS 范围与 dom 元素相关联,当我删除元素时,范围应该被垃圾收集,但这不会发生。我的问题是 - AngularJS 是否应该在我的情况下清理范围。我做错了什么,有没有更合适的方法来实现我的用例?