2013-01-25 10 views
12

मेरे पास एक निर्देश है जो एक और निर्देश को संकलित करता है और उसी दायरे से शरीर को जोड़ता है। यह "पैरेंट" निर्देश के समान स्थान नहीं होगा।दायरे पर निर्देश/बच्चे के दायरे को नष्ट कर

जब माता-पिता का निर्देश नष्ट हो जाता है तो क्या बच्चे के निर्देश और दायरे को भी नष्ट करने का कोई तरीका है? मैं पूछता हूं क्योंकि डीओएम का निरीक्षण करने के बाद बच्चे का निर्देश अभी भी वहां है।

वर्तमान में मैं माता-पिता में $ 200 को नष्ट कर देता हूं लेकिन अगर यह स्वचालित रूप से संभाला जा सकता है तो उत्सुक था।

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

बच्चे रहता है आप माता-पिता को चालू के रूप में, लेकिन मैं नष्ट हो करना चाहते हैं। ऐसा करने का सबसे अच्छा तरीका क्या होगा?

एचटीएमएल:

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

जावास्क्रिप्ट:

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

आम तौर पर, मैं मूल के निर्देश के टेम्पलेट के भीतर उप तत्व है ताकि वह तैनात है सिर्फ होगा। मुद्दा वास्तव में जेड-इंडेक्स से निपटने के लिए नीचे आता है। मूल तत्व एक कंटेनर में है जिसे स्क्रॉल किया जा सकता है, इसलिए बच्चा (एक मामले में कस्टम ड्रॉपडाउन) कंटेनर के बाद बड़ा होने पर छुपा/कट ऑफ किया जाएगा। इसका मुकाबला करने के लिए मैं दस्तावेज़ शरीर में वास्तविक बच्चा बना देता हूं और इसे माता-पिता के सापेक्ष स्थिति देता हूं। यह खुद को स्थानांतरित करने के लिए स्क्रॉल घटनाओं पर भी सुनेंगे। मेरे पास यह सब काम कर रहा है और ठीक है। यह तब होता है जब मुझे माता-पिता को हटाने की ज़रूरत होती है ... बच्चा अभी भी वहां है।

+0

मैं कोणीय में हमारी इस कार्यप्रणाली के बारे में पता नहीं कर रहा हूँ। मेरा मानना ​​है कि आप इसे अपने लिए संभालने की सेवा कर सकते हैं। – SunnyShah

+0

आप क्या करने की कोशिश कर रहे हैं? ऐसा करने के लिए यह एक बहुत ही दृढ़ तरीका है। –

+0

नीचे के मेरे नवीनतम संपादन देखें। –

उत्तर

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

अद्यतन बेला: http://jsfiddle.net/C8hs6/

+1

मैं उम्मीद कर रहा था कि स्कोप नष्ट घटना को सुनना न पड़े। अगर ऐसा करने का यही एकमात्र तरीका है, तो ऐसा ही हो। –

+0

वास्तव में यह डोम रिलेशनशिप के तहत बाल तत्व था, तो आप कोणीय इसे साफ़ कर देते थे ... लेकिन आप परिदृश्य यहां काफी अलग हैं इसलिए यह इसे संभालने की चाल है। – Ashish

+2

बस एफवाईआई, तत्व पहले से ही एक कोणीय लपेटा तत्व है, इसलिए यह भी काम करता है: 'element.remove()'। –

संबंधित मुद्दे