2013-03-26 9 views
19

Załóżmy, że mam działającą dyrektywę o nazwie <my-directive>. Wykonuje renderowanie html i obsługę zdarzeń, jest dokładnie przetestowany.Zawiń dyrektywę z niestandardowym HTML (inna dyrektywa)

Teraz chciałbym zawinąć niniejszej dyrektywy w innej dyrektywy owijarki <wrapper> który uczyni ten kod HTML <div class="my-div">, abym mógł napisać kod jak poniżej:

<wrapper> 
    <my-directive></my-directive> 
</wrapper> 

i posiadają:

<div class="my-div"> 
    <my-directive></my-directive> 
</div> 

Jak można to osiągnąć? Próbowałem już wcześniej niektórych podejść, żaden z nich nie działał, więc nie publikuję żadnego kodu.

+0

Gdybym miał pojęcia, jak to zrobić, chciałbym obejmują SSCCE. Jeśli nie wiem, jak rozwiązać ten problem w odpowiedni sposób, nie będę publikował kodu na śmieci - przepraszam. –

Odpowiedz

25

Można tworzyć dyrektywę otoki jak

app.directive('wrapper', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    transclude: true, 
    template: '<div class="my-div" ng-transclude></div>' 
    }; 
}); 

Demo: Plunker

19

Brzmi jak brakuje ng-transclude w szablonie zewnętrzną i ustawienie transclude prawdziwe w dyrektywie zewnętrznej. Atrybut ng-transclude informuje kompilator wheere wstawić wewnętrzną html kiedy transclude jest ustawiony na true

app.directive('wrapper',function(){ 
return { 
    restrict:'E', 
    template: '<div>Outer wrapper text<div ng-transclude></div></div>', 
    transclude: true, 
    replace:true 
} 
}); 

DEMO http://plnkr.co/edit/sfbRyPZjqsTG6cuiaXZV?p=preview

+0

Dzięki, to się udało. Musiałem zaakceptować drugą odpowiedź, pomyślał, ponieważ Arun był pierwszy. Mam nadzieję, że nie masz nic przeciwko :) –

Powiązane problemy