Cho một chỉ thị (container1
) với transclude và một phạm vi cô lập, khi chỉ thị được liên kết sau đó tôi có những phạm vi:Tại sao phạm vi của ng-transclude không phải là một đứa trẻ trong phạm vi chỉ thị của nó - nếu chỉ thị có phạm vi bị cô lập?
Scope 004 <-- scope of the body
Scope 005 <-- scope of directive container1
Scope 006 <-- scope of the ng-transclude
tôi mong đợi:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Nếu chỉ thị tương tự có phạm vi được chia sẻ thay vì phạm vi bị cô lập, tôi nhận được kết quả mong đợi.
Điều này gây cho tôi một vấn đề bởi vì, nếu nội dung nhúng chứa một chỉ thị (component1
) với một phạm vi cô lập, tôi nhận được:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Scope 007 <-- scope of directive component1
Tôi muốn sử dụng các chỉ thị như thế này:
<container1>
<component1 data="objectExposedInContainer1"/>
</container1>
Nhưng điều đó không hiệu quả, bên trong component1
, $scope.data
là undefined
vì objectExposedInContainer1
không nằm đúng phạm vi.
Tôi có hai câu hỏi:
- Tại sao
ng-transclude
's phạm vi không phải là một đứa trẻ phạm vi chỉ thị của nó nếu chỉ thị có phạm vi bị cô lập? Đây có phải là một lỗi? - Nếu đó không phải là lỗi, làm cách nào để chỉ thị vùng chứa chuyển dữ liệu đến nội dung của nó, nếu không phải bằng cách đặt các thuộc tính như tôi đã thử.
Đây là ví dụ mẫu không hoạt động: http://plnkr.co/edit/NDmJiRzTF9e5gw8Buht2?p=preview. Bởi vì Plunker được xây dựng với Anguar, thật khó để gỡ lỗi với Batarang. Tôi khuyên bạn nên tải xuống mã cục bộ. Nhận xét ra line 10
của app.js
để làm cho nó hoạt động bằng cách sử dụng một phạm vi chia sẻ.
1) Không, bạn đã chính xác những gì bạn yêu cầu - phạm vi của chỉ thị bị cô lập. 2) Sử dụng bộ điều khiển dùng chung. –
@Joe Gauterin, hãy xem mẫu mới này: http://plnkr.co/edit/Bv7B4OokkLi8bIctCIl3. Ở đây, 'container1' chứa' thành phần1' nhưng không sử dụng 'ng-transclude'. Lần này, ngay cả khi cả hai đều có phạm vi phân lập, phạm vi của chúng có mối quan hệ cha/mẹ chính xác. Sự hiện diện của 'ng-transclude' làm thay đổi kết quả. – Sylvain