8

Używam dyrektywy ng-include src w wielu miejscach w moim kodzie HTML. Każdy ng-include tworzy izolowany zakres dla siebie, który najwyraźniej sprawia mi wiele problemów.Zapobiegaj `ng-include` przed tworzeniem izolowanego zakresu. AngularJS

Na przykład.

<div ng-controller="parent"> 
    <div ng-include src="'id1'"> 
    </div> 
    <div ng-include src="'id2'"> 
    </div> 
    <div ng-include src="'id2'"> 
    </div> 
</div> 

W powyższym html powstają 4 zakresy. 1 u rodzica, gdzie controller jest zdefiniowany, a 3 są domyślnie tworzone na każdym ng-include src.

Czy można w ogóle uniemożliwić ng-include utworzenie izolowanego zakresu dla siebie? Jeśli nie jest to możliwe, czy istnieje obejście tego problemu?

+0

prostu stworzyć własny szablon dyrektywy i obciążenia przez niego, bez deklarowania izolowane zakres –

+0

@pankajparkar Jak? Czy masz przykład, jak to zrobić? –

+0

ng-include nie tworzy izolowanego zakresu - tworzy zakres podrzędny, który nie jest izolowany od elementu nadrzędnego. Zanim wymyślisz nowe koło z nową dyrektywą, chciałbym wiedzieć, jakie problemy są spowodowane. Zasięg potomny jest tworzony z jakiegoś powodu - zapobiega wzajemnemu zakłócaniu się szablonów. –

Odpowiedz

14

Należy utworzyć własną dyrektywę, która może załadować określony szablon z izolowanym zakresem.

HTML

<div ng-controller="parent"> 
    <div my-directive template-path="id1"> 
    </div> 
    <div my-directive template-path="id2"> 
    </div> 
    <div my-directive template-path="id2"> 
    </div> 
</div> 

dyrektywa

.directive('myDirective', function() { 
    return { 
     restrict: 'AE', 
     templateUrl: function(ele, attrs) { 
      return attrs.templatePath; 
     } 
    }; 
}); 

Working Plunkr

+0

Nie zwraca niczego. –

+0

@AdityaPonkshe zobacz moją zaktualizowaną odpowiedź, dodano opcję 'restrict: 'AE'' obsługuje dyrektywę –

+1

Udało się! dzięki wielkie. Skończyłem dając twardą zakodowaną ścieżkę w templateurl w dyrektywie, ale rozwiązało problem zakresu. +1 dla rozwiązania. –