2015-06-22 18 views
6

Tôi có một mối quan ngại khi tạo một chỉ thị tùy chỉnh ở góc cạnh. Khi tôi đang sử dụng một hàm liên kết, tôi không chắc chắn sự khác biệt thực sự khi truy cập các thuộc tính với attrs hoặc scope. Đi đoạn mã này ví dụ: Phạm vi chỉ thị tùy chỉnh vs attrs

myApp.directive('someDirective', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      title: '=title' 
     }, 
     template: '<img/>', 
     link: function(scope, element, attrs) { 
      if (scope.title) { 
       // do something here 
      } 
      if (attrs.title){ 
       // do something here 
      } 
     }, 
    } 

Từ quan sát của tôi truy cập vào 'danh hiệu' thuộc tính từ attrs và phạm vi có tác dụng tương tự. Sự khác biệt thực sự là gì?

+0

Vui lòng xem http://stackoverflow.com/questions/14300986/angularjs-directive-isolated-scope-and-attrs –

Trả lời

19

Sự khác biệt là thuộc tính là một loại Chuỗi theo định nghĩa. Luôn luôn. Trong trường hợp của bạn, attrs.title sẽ có nghĩa đen là chuỗi bằng bất kỳ thứ gì bạn chuyển vào thuộc tính trong HTML.

Tuy nhiên, scope.title được phân tích cú pháp và đánh giá kết quả của thuộc tính attr.title.

Ví dụ: Nếu bạn sử dụng một cái gì đó như thế này trong HTML

<some-directive title="name"></some-directive> 

nơi $scope.name = "Thomas Mann" được xác định trong phạm vi, sau đó attr.title sẽ là chuỗi "name", trong khi scope.title sẽ "Thomas Mann".

+0

Câu trả lời thú vị này. Để thêm vào đó, bạn cũng có thể thực hiện 'scope. $ Eval (attrs.title)' để có được phiên bản phân tích của thuộc tính trong ngữ cảnh của phạm vi. –

+0

Đó là tất cả? Tôi nghĩ rằng khi bạn sử dụng @ cho phạm vi ràng buộc nó cũng đang được thông qua như là chuỗi để nó có tác dụng tương tự, phải không? – Marcin86

+1

@ Marcin86, khá nhiều thứ được chuyển vào một thuộc tính là một chuỗi, và một cái gì đó được truyền như một biến phạm vi có thể là bất kỳ kiểu dữ liệu nào. Nhưng bạn cũng có thể làm 'phạm vi. $ Eval (attrs.title)' để đánh giá thuộc tính trong ngữ cảnh của phạm vi, như tôi đã nhận xét ở trên. –

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