2013-08-08 23 views
21

Tôi nhớ đã thấy câu nói nổi tiếng này từ một video trên AngularJS nói rằng nên luôn sử dụng a. (dấu chấm) trong các mô hình của bạn.Nếu bạn không sử dụng dấu chấm (.) Trong các mô hình AngularJS bạn đang làm sai?

Vâng, tôi đang cố gắng để làm theo này nói rằng tôi có

var item = {} 
    item.title = "Easy Access to support"; 
    item.available = true; 
    item.price = 31.67; 

Vì vậy, công trình này rất lớn trong quan điểm của tôi tôi làm

{{ item.title }} 
    {{ item.available }} 

Tôi đang sử dụng một dấu chấm vì vậy tôi nghĩ rằng đây là tốt.

Nhưng tôi có một số thuộc tính mà tôi không coi là một phần của mô hình nhưng có thể tôi đã sai. Ví dụ tôi có một thuộc tính mà tôi sử dụng để bật hoặc tắt một nút bằng cách sử dụng ng-disable, tôi đã nhập định dạng dấu chấm này bằng cách sử dụng dấu chấm. về cơ bản nó vào như vậy

$scope.disableButton = true; 

và tôi sử dụng nó như

ng-disable="disableButton"...... 

Tôi có nên làm cho phần này của mô hình "mặt hàng"? hoặc tạo một đối tượng js khác để tôi có thể giữ thuộc tính này bằng dấu chấm?

Bất kỳ ai biết nếu điều này có thể chấp nhận được hay tôi nên làm mọi thứ (ngay cả những thuộc tính đơn giản này) với .dot ??

Cảm ơn

+3

Đây là địa điểm chính xác trong video mà Miško đề cập đến bạn cần một "dấu chấm" với ng-model: http://www.youtube.com/watch?v=ZhfUv0spHCY&feature=youtu.be&t=32m51s –

+0

Một nơi mà "sử dụng một dấu chấm" tách rời là nếu chỉ thị của bạn có một ngModel nhưng kết thúc tốt hơn các chỉ thị khác và chuyển ngModel qua các chỉ thị khác. Ký hiệu dấu chấm bị mất ngay khi thẻ đầu tiên xảy ra, bởi vì biến được đổi tên thành "ngModel" (hoặc bất kỳ bí danh nào bạn đặt) ngay sau khi nó được truyền cho chỉ thị đầu tiên. Từ đó trở đi, nó được gọi là "ngModel" không có dấu chấm và được coi là nguyên thủy, ảnh hưởng đến khả năng truyền qua chuỗi chỉ thị lồng nhau –

Trả lời

41

"Luôn luôn có dấu chấm trong mô hình của bạn" là ngModel. Chỉ thị này có ràng buộc hai chiều. Nếu bạn liên kết hai chiều với một nguyên thủy (như Boolean trong trường hợp của bạn), setter sẽ đặt nó trên phạm vi hiện tại hơn là phạm vi mà nó được xác định, điều này có thể gây đau đầu khi bạn có một người dùng lớn giao diện với rất nhiều phạm vi con. Nó không đề cập đến các chỉ thị khác như ngDisable. Xem this explanation để biết thêm chi tiết về vấn đề cụ thể này.

Kịch bản mẫu: phạm vi cha mẹ với $scope.foo = "bar" và phạm vi con với <input type="text" data-ng-model="foo">. Nó sẽ hiển thị bar ban đầu, nhưng khi người dùng thay đổi giá trị, một foo sẽ được tạo trên phạm vi con con và ràng buộc sẽ đọc và ghi giá trị đó. Phụ huynh foo sẽ giữ nguyên bar. Hy vọng rằng tóm tắt nó tốt.

Vì vậy, với mục đích ngModel, bạn có thể phải tạo một đối tượng để giải quyết các vấn đề ràng buộc đó, nhưng đối với bất kỳ chỉ thị nào khác, bạn nên có nhóm hợp lý, thông thường.

+1

Đó là một lời giải thích tuyệt vời, cảm ơn. – Martin

+2

'controllerAs' cú pháp hoạt động tốt cho mục đích này (và nói chung để tránh nhầm lẫn phạm vi). – GBa

+1

Giải thích rõ ràng nhất, ngắn gọn nhất mà tôi đã thấy cho điều này. –

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