2013-12-18 23 views
5

Tôi đã cố gắng hiểu sự khác biệt giữa phạm vi bị cô lập và phạm vi kế thừa trong chỉ thị. Đây là một ví dụ tôi đã chuẩn bị để làm cho bản thân mình hiểu:Chỉ thị AngularJS - Phạm vi biệt lập và Phạm vi kế thừa

HTML

<div ng-controller="AppController"> 
    <div my-directive> 
     Inside isolated scope directive: {{myProperty}} 
    </div> 

    <div my-inherit-scope-directive> 
     Inside inherited scope directive: {{myProperty}} 
    </div> 
</div> 

Các JS

angular.module("myApp", []) 
     .directive("myInheritScopeDirective", function() { 
      return { 
       restrict: "A", 
       scope: true 
      }; 
     }) 
     .directive("myDirective", function() { 
      return { 
       restrict: "A", 
       scope: {} 
      }; 
     }) 
     .controller("AppController", ["$scope", function($scope) { 
      $scope.myProperty = "Understanding inherited and isolated scope"; 
     }]); 

Thực thi mã với góc-1.1.5, nó hoạt động như Tôi mong đợi: {{myProperty}} bên trong chỉ thị của tôi sẽ là undefined vì phạm vi bị cô lập, trong khi chỉ thị phạm vi kế thừa của tôi, {{myProperty}} sẽ có giá trị Understanding inherited and isolated scope.

Nhưng thực hiện với Angular-1.2.1, trong cả chỉ thị {{myProperty}} kết quả đầu ra Understanding inherited and isolated scope.

Mọi thứ tôi bị thiếu?

Trả lời

2

Nút văn bản bên trong chỉ thị của bạn bị ràng buộc với phạm vi bộ điều khiển. Do đó phạm vi của chỉ thị không có hiệu lực. Tôi nghĩ rằng điều này có changed kể từ v1.2. Bạn phải sử dụng mẫu cho chỉ thị của mình:

.directive("myIsolatedDirective", function() { 
    return { 
     template: 'Inside isolated in template scope directive: {{myProperty}}', 
     restrict: "A", 
     scope: { 
      myProperty: '=' 
     } 
    }; 
}) 

Kiểm tra this fiddle.

+0

Cảm ơn @Reto, sau đó là điểm của phạm vi phân lập trong v1.2, nếu nó thừa hưởng thuộc tính từ bộ điều khiển. –

+0

Đó là về mẫu bên trong chỉ thị. Nếu bạn loại bỏ sự cô lập phạm vi từ 'myIsolatedDirective',' myProperty' sẽ bị ràng buộc với phạm vi điều khiển. Tôi nghĩ rằng hành vi trong 1.1.x không được dự định như Vojta đã nói: “Các phần tử con được xác định trong mẫu ứng dụng hoặc trong một số mẫu chỉ thị khác không nhận được phạm vi cô lập. Về lý thuyết, không ai nên dựa vào hành vi này, vì nó rất hiếm - trong hầu hết trường hợp, chỉ thị cô lập có một mẫu. ” –

+0

Cảm ơn @Reto hoặc giải thích. –

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