2012-12-14 28 views
6

sau ngày từ câu hỏi này: how to write a directive for angularjs that replaces dom elements without using ng-transclude?làm thế nào để viết một chỉ thị cho angularjs thay thế các yếu tố dom nhưng giữ bindings

Tôi muốn viết một chỉ thị rằng những thay đổi các yếu tố dom nhưng sau đó giữ lại tất cả các thuộc tính và các ràng buộc.

<g:text x={{myX}} y={{myY}} font-size=10>Hello There</g:text> 

để

<text x={{myX}} y={{myY}} font-size=10>Hello There</text> 

cảm ơn trước!

Trả lời

6

Sử dụng cùng một logic và sao chép các thuộc tính trong biên dịch:

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

fiddle: http://jsfiddle.net/YWfSF/

8

Để theo sự hiểu biết của tôi, góc di chúc cảng thuộc tính đến các yếu tố mới tự động. Không cần phải tự mình lặp lại chúng.

Trong trường hợp của bạn, bạn cũng cần phải chuyển đổi nội dung nếu bạn muốn giữ nội dung đó.

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

Đây là từ đầu bộ nhớ của tôi, nhưng tôi tin rằng điều gì đó tương tự như điều này sẽ làm điều này. Mỗi thuộc tính của phần tử gốc sẽ được chuyển đến phần tử mới và nội dung của phần tử cũng sẽ được chuyển đổi. Binds bảo tồn và tất cả.

+0

tôi tin rằng bạn có nghĩa là "thay thế" –

+0

tôi tin rằng bạn nói đúng :) Cố định – diegovilar

+1

Cũng cần 'transclude: true' attribut e – Patrick

0

(Để đối phó với yêu cầu Jason Swett cho một bản cập nhật)

công trình này trong 1.4.9 kiễu góc (và prob sớm quá)

return { 
     restrict: 'E', // optional 
     replace: true, // optional 
     template: '<span data-ng-transclude></span>', 
     transclude: true, 
     link: function (scope, el, attrs) ......... 
} 

Một bài viết tuyệt vời về điều này là tại ...

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

Các vấn đề liên quan