2012-09-27 42 views
6

Làm thế nào để ngăn chặn chỉ thị với transclude để tạo ra phạm vi mới?AngularJS chỉ thị transclude phạm vi = sai?

Điều này jsfiddle Tôi không thể ràng buộc bất kỳ điều gì do các phạm vi mới được minh họa bằng đường viền màu đỏ.

Html:

<div ng-app="components"> 
    <input ng-model="var"> 
    <block> 
     123 
     <input ng-model="var"> 
    </block> 
</div> 

JavaScript:

angular.module('components', []).directive('block',function(){ 
    return{ 
     scope:false, 
     replace:true, 
     restrict:"E", 
     transclude:true, 
     template:'<div class="block" ng-transclude></div>', 
     link:function(scope, el, attrs, ctrl){ 

     } 
    } 
}); 

CSS:

.ng-scope{ 
    border:1px solid red; 
    margin:10px; 
} 

Trả lời

6

Đó là thực sự mong đợi behav ior như đã nêu ở đây (ng-transclude tạo ra một phạm vi trẻ em): https://github.com/angular/angular.js/issues/1056 và thảo luận ở đây: https://groups.google.com/forum/#!msg/angular/45jNmQucSCE/hL8x48-JfZIJ

Bạn có thể workaround này bằng cách thiết lập một thành viên trên một đối tượng trong phạm vi (obj.var) như trong fiddle này: http://jsfiddle.net/rdarder/pnSNj/10/

+0

Cảm ơn. Tôi đã làm một ví dụ đơn giản hơn [jsfiddle] (http://jsfiddle.net/RHLzK/5/). Nhưng đó có phải là một lỗi hay nó là một tính năng? – Jossi

+0

Hành vi bình thường đối với phạm vi con (chúng kế thừa từ nguyên mẫu từ phạm vi gốc, có nghĩa là bạn có thể đọc từ phạm vi gốc, nhưng ngay khi bạn viết, nó nằm trong phạm vi con - trừ khi bạn sử dụng obj trên phạm vi cha mẹ workaroud), bạn có lẽ có thể xem mã nguồn của chỉ thị ng-transclude, sao chép nó và tạo của riêng bạn với một phạm vi: tùy chọn sai. – Guillaume86

+0

Các vấn đề xuất hiện trở lại nếu tôi bắt đầu sử dụng transclude được đặt làm 'phần tử'. Có ai có bất kỳ ý tưởng tại sao nó không hoạt động ngay bây giờ. Demo: http://plnkr.co/edit/Bv1kFQtzdVzsasHTUrgf?p=preview –

0

Mặc dù điều này không được khuyến cáo bởi nhóm kiễu góc, cách giải quyết khác là để gọi một cách rõ ràng phạm vi $ cha mẹ trong phần nhúng:

<div ng-app="components"> 
    <input ng-model="var"> 
    <block> 
     123 
     <input ng-model="$parent.var"> 
    </block> 
</div> 
Các vấn đề liên quan