我有一个指令,它编译另一个指令并将其附加到传递的相同范围的主体中。这不会与“父”指令位于同一位置。
当父指令被销毁时,是否有某种方法可以让子指令和作用域也被销毁?我问这个问题是因为在检查 DOM 后,子指令仍然存在。
目前,我连接到了父母 $destroy 事件,但很好奇它是否可以自动处理。
js小提琴: http://jsfiddle.net/FPx4G/1/ http://jsfiddle.net/FPx4G/1/
当你切换父级时,孩子会留在那里,但我希望被摧毁。最好的方法是什么?
html:
<div ng-app="app">
<div ng-controller="ParentCtrl">
<button data-ng-click="toggleParent()">Toggle Parent</button>
<div data-ng-switch data-on="displayDirective">
<div data-ng-switch-when="true">
<div class="parentDirective">Parent Directive</div>
</div>
</div>
</div>
</div>
javascript:
angular.module('app', [])
.directive("parentDirective", function($compile){
return {
restrict: 'C',
link: function(scope, element){
var secondDirective = angular.element(document.createElement("div"));
secondDirective.addClass("childDirective");
document.body.appendChild(secondDirective[0]);
$compile(secondDirective)(scope);
}
}
})
.directive("childDirective", function(){
return {
restrict: 'C',
template: '<div>Child Directive</div>',
link: function(scope, element){
scope.$on("destroy", function(){
alert(1);
});
}
}
});
function ParentCtrl($scope){
$scope.displayDirective = true;
$scope.toggleParent = function(){
$scope.displayDirective = !$scope.displayDirective;
}
}
通常,我只需将子元素放在原始指令的模板中,以便其正确定位。这个问题实际上归结为处理 z-index。父元素位于可以滚动的容器中,因此子元素(在一种情况下是custom如果它比容器大,下拉菜单)将被隐藏/切断。为了解决这个问题,我在文档正文中创建实际的子项,并将其相对于父项定位。它还会侦听滚动事件以重新定位自身。我已经一切正常了,而且一切都很好。当我需要删除父级时就会发生这种情况......孩子仍然在那里。