2012-12-14 55 views

cevap

6

derleme sırasında aynı mantık kullanın ve özelliklerini kopyalamak:

app.directive('gText', function() { 
    return { 
     restrict: 'E', 
     compile: function(tElement, tAttrs) { 
      var attrs = tElement[0].attributes; 
      tElement.replaceWith('<text>' + tElement.text() + '</text>');    
      for (var i=0; i < attrs.length; i++) { 
       tElement.attr(attrs.item(i).nodeName, attrs.item(i).nodeValue);    
      } 
     } 
    } 
}); 

keman: my kadarıyla http://jsfiddle.net/YWfSF/

8

, Açısal irade portu otomatik olarak yeni elemana bağlıyor. Tüm bunları kendiniz üzerinde tekrarlamaya gerek yok. Bunu tutmak istiyorsanız Senin durumunda

, ayrıca içeriği transclude gerekir.

app.directive('myText', function() { 
    return { 
     replace: true, 
     template: '<text ng-transclude></text>' 
    } 
}); 

Bu, hafızamın en üst kısmından geliyor, ama sanırım buna benzer bir şey hile yapar. Orijinal öğenin her özelliği yeni öğeye taşınır ve öğenin içeriği de aktarılır. Binds korunmuş ve hepsi.

+0

Ben size –

+0

"yerine" anlamına inanıyoruz e – diegovilar

+1

Ayrıca 'transclude ihtiyaç sağ :) Sabit olduğuna inanmak – Patrick

0

bu Açısal 1.4.9 çalışır

(güncelleştirme için Jason Swett talebine yanıt olarak) (ve prob önceki çok)

bu konuda büyük bir makale yer almaktadır
return { 
     restrict: 'E', // optional 
     replace: true, // optional 
     template: '<span data-ng-transclude></span>', 
     transclude: true, 
     link: function (scope, el, attrs) ......... 
} 

...

TRUE Attribut:

https://www.accelebrate.com/blog/angularjs-transclusion-part-1/