2015-07-09 14 views
6

Vì vậy, AngularJs không chấp nhận thuộc tính Replace của chỉ thị. referenceAngularJS Chỉ thị tài sản: Thay thế không được dùng nữa - Tương đương?

bối cảnh:

.directive('myDir', function($compile) { 
    return { 
     restrict: 'E', 
     template: '<div>{{title}}</div>' 
    } 
    }); 

này sẽ ouput:

<my-dir> 
    <div> some title </div> 
</my-dir> 

Vì vậy, Replace sẽ thay thế <my-dir></my-dir> với template. Tương đương những ngày này là gì? Hoặc là nó chỉ sử dụng một chỉ thị với restrict: 'A'.

Tôi tạo ra này:

.directive('myDir', function($compile) { 
    return { 
     restrict: 'E', 
     template: '<div>{{title}}</div>', 
     link: link 
    }; 

    function link(scope, iElem, IAttr, ctrl, transcludeFn) { 
     var parent = iElem.parent(); 
     var contents = iElem.html(); 

     iElem.remove(); 

     parent.append($compile(contents)(scope)); 
    } 
    }); 

mà sẽ đầu ra:

<div> some title </div> 
+0

Điều bạn đã làm sẽ hoạt động tốt, vì tôi chắc chắn bạn đã biết. Thấy như là không được chấp nhận trong phiên bản 2.0, tôi thực sự sẽ không lo lắng về việc không sử dụng nó cho thời điểm này là sự khác biệt giữa hai sẽ khá đáng kể. Google cũng nhanh chóng đề xuất rằng các tài liệu đã lỗi thời, nó không bị xóa - https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb#commitcomment-8124407 –

+0

@DanielEdwards oh đủ công bằng, hãy hét to! Tôi cũng có thể đặt đó là câu trả lời. Hoặc bạn có thể –

+0

Đây không phải là một bản sao chính xác nhưng câu hỏi này có câu trả lời phù hợp: http://stackoverflow.com/questions/16496647/replace-ng-include-node-with-template –

Trả lời

2

Documents dường như đang lỗi thời - replace cho chỉ thị không được gỡ bỏ.

Source

4

cơ bản tương đương với replace: true

app.directive('directive', function() { 
    return { 
    ... 
    link: function postLink(scope, element, attrs) { 
     element.replaceWith(element.contents()); 
    } 
    }; 
}); 

Tuy nhiên, có tác dụng phụ mà bạn có thể dễ dàng nhận ra. Các ràng buộc vẫn còn đó nhưng các thuộc tính từ chỉ thị sẽ không được dịch sang mẫu.

May mắn thay, thường không có lý do nào cho điều này trừ khi có điều kiện replace là bắt buộc. replace được coi là không được dùng cho Angular 2 như bạn đã nhận thấy (nó không phù hợp với khái niệm thành phần web) nhưng hoàn toàn tốt cho 1.x.

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