2012-09-27 12 views
6

Jak zabezpieczyć dyrektywę transclude, aby utworzyć nowe zakresy?AngularJS transclude scope = false?

To nie ma znaczenia, ponieważ dzięki nowym zakresom zilustrowanym czerwonymi obramowaniami.

HTML:

<div ng-app="components"> 
    <input ng-model="var"> 
    <block> 
     123 
     <input ng-model="var"> 
    </block> 
</div> 

JavaScript:

angular.module('components', []).directive('block',function(){ 
    return{ 
     scope:false, 
     replace:true, 
     restrict:"E", 
     transclude:true, 
     template:'<div class="block" ng-transclude></div>', 
     link:function(scope, el, attrs, ctrl){ 

     } 
    } 
}); 

CSS:

.ng-scope{ 
    border:1px solid red; 
    margin:10px; 
} 

Odpowiedz

6

To jest rzeczywiście oczekuje Behav IOR jak podano tutaj (ng-transclude utworzyć obszar dziecko): https://github.com/angular/angular.js/issues/1056 i omówione tutaj: https://groups.google.com/forum/#!msg/angular/45jNmQucSCE/hL8x48-JfZIJ

to można obejść poprzez ustawienie elementu na obiekcie w zakresie (obj.var) jak w tym skrzypce: http://jsfiddle.net/rdarder/pnSNj/10/

+0

Dzięki. Zrobiłem prostszy przykład [jsfiddle] (http://jsfiddle.net/RHLzK/5/). Ale czy to błąd, czy jest to funkcja? – Jossi

+0

To normalne zachowanie dla teleskopów potomnych (dziedziczą one przez prototyp z zakresu nadrzędnego, co oznacza, że ​​można czytać z zakresu nadrzędnego, ale tak szybko, jak piszesz, jest ono w zakresie podrzędnym - chyba że użyjesz obiektu na nadrzędnym zakresie roboczym), może warto rzucić okiem na kod źródłowy dyrektywy ng-transclude, skopiować go i stworzyć własny z opcją scope: false. – Guillaume86

+0

Problemy pojawiają się ponownie, jeśli zacznę używać zestawu transclude jako "element". Czy ktoś ma jakiś pomysł, dlaczego teraz nie działa? Demo: http://plnkr.co/edit/Bv1kFQtzdVzsasHTUrgf?p=preview –

0

Chociaż nie jest to zalecane przez kątowe zespołu, kolejny obejście jest jawnie wywołać zakres $ dominującą w dołączany Porcja:

<div ng-app="components"> 
    <input ng-model="var"> 
    <block> 
     123 
     <input ng-model="$parent.var"> 
    </block> 
</div> 
Powiązane problemy