2013-01-25 31 views
12

Tôi có một chỉ thị biên dịch một chỉ thị khác và đính kèm nó vào cơ thể với cùng phạm vi được thông qua. Đây sẽ không phải là vị trí giống như chỉ thị "cha mẹ".phá hủy chỉ thị/phạm vi con trên phạm vi tiêu diệt

Khi chỉ thị cha mẹ bị hủy là có cách nào đó để có chỉ thị và phạm vi con phá hủy không? Tôi hỏi vì sau khi kiểm tra DOM, chỉ thị trẻ em vẫn còn đó.

Hiện tại tôi đã tham gia sự kiện tiêu diệt cha mẹ $ nhưng tò mò nếu nó có thể được xử lý tự động.

jsFiddle:http://jsfiddle.net/FPx4G/1/

Đứa trẻ vẫn có khi bạn chuyển đổi các phụ huynh, nhưng tôi muốn để bị phá hủy. Phương pháp tốt nhất để làm điều đó là gì?

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; 
    } 
} 

Thông thường, tôi muốn chỉ có các yếu tố phụ trong mẫu chỉ thị ban đầu sao cho nó đúng vị trí. Vấn đề thực sự đi xuống để đối phó với z-index. Phần tử gốc nằm trong vùng chứa có thể cuộn được, vì vậy, con (trong một trường hợp là một trình đơn thả xuống tùy chọn tùy chỉnh) sẽ bị ẩn/cắt nếu nó lớn hơn vùng chứa đó. Để chống lại điều này tôi thay vì tạo ra đứa trẻ thực sự trong cơ thể tài liệu và vị trí nó liên quan đến cha mẹ. Nó cũng sẽ lắng nghe trong các sự kiện di chuyển để định vị lại chính nó. Tôi có tất cả công việc và chỉ là tốt. Đó là những gì xảy ra khi tôi cần phải xóa cha mẹ ... đứa trẻ vẫn còn đó.

+0

Tôi không nhận thức được chức năng như vậy trong góc. Tôi tin rằng bạn có thể một dịch vụ để xử lý điều này cho bạn. – SunnyShah

+0

Bạn đang cố gắng làm gì? Điều này có vẻ như một cách rất phức tạp để làm điều này. –

+0

Xem chỉnh sửa mới nhất của tôi ở gần cuối. –

Trả lời

16
directive("childDirective", function(){ 
    return { 
     restrict: 'C',    
     template: '<div >Child Directive</div>',     
     link: function(scope, element){     
      scope.$on("$destroy",function() { 
       element.remove(); 
      }); 
     } 
    } 
}); 

cập nhật fiddle: http://jsfiddle.net/C8hs6/

+1

Tôi đã hy vọng không phải lắng nghe sự kiện phá hủy phạm vi. Nếu đây là cách duy nhất để làm điều đó mặc dù như vậy được nó. –

+0

Nếu nó là yếu tố con thực sự dưới mối quan hệ DOM thì bạn góc cạnh sẽ làm sạch nó ... nhưng kịch bản của bạn là khá khác nhau ở đây vì vậy đây là thủ thuật để xử lý nó. – Ashish

+2

Chỉ cần FYI, phần tử này đã là một phần tử bọc Angular, do đó, nó cũng hoạt động: 'element.remove()'. –

Các vấn đề liên quan