2012-07-11 17 views
17

Tôi có một chỉ thị khá đơn giản mà tôi muốn tải mẫu từ một tệp HTML riêng biệt. Tôi muốn HTML thay thế chỉ thị và vì vậy tôi thêm thuộc tính replace: true vào chỉ thị. Tuy nhiên khi tôi làm điều này, các mẫu không nhận được bao gồm cả.AngularJS - Tại sao không thay thế: công việc thực sự với thuộc tính templateUrl?

Tôi đã tạo một jsFiddle nơi bạn có thể thấy điều này. Nếu bạn sử dụng Firebug hoặc một cái gì đó để kiểm tra DOM, bạn có thể thấy rằng khi nó chỉ sử dụng thuộc tính template, nó sẽ thay thế phần tử. Nếu bạn gỡ bỏ replace: true, bạn có thể xem HTML tại số templateUrl được nối thêm vào phần tử foo. Tuy nhiên, ngay khi tôi thêm replace: true vào số templateUrl, tất cả những gì tôi thấy là <foo></foo> trong DOM.

Có lý do gì khiến bạn không thể sử dụng hai thuộc tính này cùng nhau không? Tôi xa một chuyên gia với javascript, vì vậy bất kỳ thông tin về những gì đang xảy ra ở đây sẽ được đánh giá cao.

+0

xem [tại đây] (https://github.com/angular/angular.js/issues/1459) nếu bạn đang làm việc với các bảng –

Trả lời

34

Đảm bảo nội dung của html của bạn trong templateUrl có chính xác một phần tử gốc. Đây không phải là một vấn đề khi replace: false nhưng sẽ trở thành một vấn đề khi replace: true và bạn sẽ thấy lỗi này Console (với Firebug):

Error: Template must have exactly one root element. 

Đây là một jsFiddle của nó not working (với hai yếu tố gốc) và khác với nó working .

+8

Tệp html của tôi có một số nhận xét bên ngoài phần tử mức gốc của tôi. Tôi nghĩ rằng các bình luận là tốt, nhưng khi tôi loại bỏ tất cả các ý kiến ​​bên ngoài và chỉ có một div bên ngoài, nó hoạt động tốt. Cảm ơn! – dnc253

+3

Bất cứ ai cũng có may mắn với việc sử dụng các thẻ hàng trong bảng? Nếu bạn thay thế ví dụ làm việc với tr td nó ngừng hoạt động ... – toxaq

+0

@toxaq Đối với các thẻ hàng trong bảng, tôi đã chuyển chỉ thị kiểu 'E' thành chỉ thị loại 'A'. – JisuKim82

1

Câu hỏi hay. Nếu tôi không nhầm, bạn muốn sử dụng "transclude"

http://jsfiddle.net/dandoyon/AsVp8/1/

Transclude cho phép bạn pha trộn mẫu của bạn với những gì có trong HTML. Bạn có thể muốn cung cấp cho tài liệu một cái nhìn khác và tìm tùy chọn này.

cổ vũ!

+0

Nếu tôi không nhầm, không chuyển đổi chỉ cho phép bạn đặt nội dung của thẻ vào kết quả cuối cùng? Đây không phải là điều tôi muốn. Tôi chỉ muốn thẻ của tôi được thay thế hoàn toàn bằng những gì có trong mẫu. Phần blah blah trong jsFiddle của tôi chỉ là để đảm bảo rằng một phần của thẻ đã biến mất trong kết quả cuối cùng. – dnc253

+0

Ok. Vâng http://jsfiddle.net/dandoyon/AsVp8/2/ (mà tôi nghĩ là những gì bạn có trước đây) hoạt động và thay thế những gì đang có. Tui bỏ lỡ điều gì vậy? Trình duyệt mà bạn đang sử dụng? IE cần những cân nhắc đặc biệt cần phải thực hiện cho IE. Hãy cho tôi biết nếu đó là vấn đề gì. Tôi đã viết một cái gì đó cho angular-ui để autoshiv chỉ thị của chúng tôi. https://github.com/angular-ui/angular-ui/blob/master/common/ieshiv/src/ieshiv.js –

+0

Sự cố xảy ra với thuộc tính templateUrl đã nhận xét. Không có cách nào cho tôi để có jsFiddle nhấn tập tin html địa phương của tôi, vì vậy tôi chỉ cần đặt một số URL nó có thể nhấn. Với thông tin được Gloopy đề cập, tôi đã có thể đoán ra đó là những nhận xét bên ngoài div cấp gốc của tôi đã gây ra vấn đề. – dnc253

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