2014-12-30 20 views
11

tôi đang học AngularJS chỉ thị, và có một điều tôi muốn làm là để vượt qua một số biến $scope.message trong các phụ huynh scope (một scope của một controller), và tôi muốn nó được đổi tên thành param bên trong directivealert. Tôi có thể làm điều này với một phạm vi riêng biệt:đèo biến để AngularJS chỉ thị mà không bị cô lập phạm vi

<div alert param="message"></div> 

và xác định

.directive("alert", function(){ 
    return{ 
     restrict: "A", 
     scope: { 
      param: "=" 
     }, 
     link: function(scope){ 
      console.log(scope.param) # log the message correctly 
     } 
    } 
}) 

Nhưng tôi có thể làm điều này mà không cần sử dụng phạm vi bị cô lập? Giả sử tôi muốn thêm một directivetoast đến <div toast alert></div> và sử dụng cùng param (giữ 2 chiều liên kết dữ liệu), ngây thơ tôi sẽ làm

.directive("toast", function(){ 
    return{ 
     restrict: "A", 
     scope: { 
      param: "=" 
     }, 
     link: function(scope){ 
      console.log(scope.param) 
     } 
    } 
}) 

Tôi chắc chắn sẽ nhận được một lỗi Multiple directives [alert, toast] asking for new/isolated scope on:<div...

Vì vậy, trong tất cả, câu hỏi của tôi là, làm cách nào để đổi tên biến phạm vi gốc mà không có phạm vi phân lập và cách chia sẻ các biến khi hai directives được đặt trên một đơn DOM?

+0

Bạn có muốn 2 chỉ thị liên kết với cùng thuộc tính '$ scope' của cha mẹ không? –

Trả lời

13

Sửa đổi chỉ bánh mì nướng của bạn:

.directive("toast", function(){ 
    return{ 
     restrict: "A", 
     link: function(scope, elem, attrs){ 
      var param = scope.$eval(attrs.param); 
      console.log(param) 
     } 
    } 
}) 

Example fiddle.

Vì bánh mì nướng bây giờ nằm ​​trên cùng phạm vi với cha mẹ (nếu được phép tách biệt phạm vi), bạn có thể chỉ cần gọi $ eval trên phạm vi với thuộc tính param để nhận giá trị.

+0

Cảm ơn, hoạt động hoàn hảo! Tôi nên xem xét các tài liệu '$ eval()' sau đó. – Lelouch

+0

không $ eval() chỉ trả về giá trị hoặc thực sự cung cấp ràng buộc dữ liệu? Nó xuất hiện nó chỉ trả về giá trị, nhưng tôi muốn chắc chắn. – Lelouch

+1

Nó chỉ là giá trị. Nếu bạn cần phải mô phỏng bindings, bạn có thể sử dụng một $ xem ... Tôi tin rằng điều này có thể được overkill mặc dù như bạn chỉ cần $ eval một lần nữa để có được giá trị gần đây nhất (trên một số ngEvent ví dụ). – Patrick

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