Một thay thế cho tham khảo một tài sản đối tượng trong phạm vi cha mẹ là sử dụng $ cha mẹ để truy cập nguyên thủy trong phạm vi phụ huynh:
<input ng-model="$parent.testvalue" />
ng-bao gồm tạo ra một phạm vi nhỏ. Phạm vi đó nguyên mẫu được thừa hưởng từ phạm vi cha mẹ của Ctrl. Đây là cách 3 biến thể làm việc:
- $ parent.testvalue gắn mô hình đối với tài sản trong phạm vi mẹ
- testvalue tự gắn các mô hình để một tài sản mới sẽ được tạo ra trên phạm vi trẻ em. Thuộc tính này "đổ bóng/ẩn" thuộc tính phạm vi cha mẹ bằng cùng một tên.
- foo.testvalue (ví dụ: xem câu trả lời của @ dnc253) cũng liên kết mô hình với thuộc tính gốc. Nó hoạt động như thế này: Javascript không nhìn thấy/tìm thấy 'foo' trong phạm vi con, vì vậy nó tìm nó trong phạm vi cha mẹ (do thừa kế nguyên mẫu) và tìm thấy nó ở đó.
Để xem những gì phạm vi con trông như thế nào, sử dụng fiddle ban đầu của bạn, và thêm mã này vào mẫu của bạn ở đâu đó:
<a ng-click="showScope($event)">show scope</a>
Và thêm mã này vào Ctrl của bạn:
$scope.showScope = function(e) {
console.log(angular.element(e.srcElement).scope());
}
Trước khi bạn nhập vào hộp văn bản, hãy nhấp vào liên kết "hiển thị phạm vi". Trong giao diện điều khiển (tôi đang sử dụng Chrome), bạn có thể mở rộng phạm vi "Con" và thấy nó không chứa thuộc tính testvalue (mà tôi thấy đáng ngạc nhiên, bởi vì tôi không biết nó hiển thị "giá trị ban đầu" như thế nào trong hộp văn bản).Bạn có thể mở rộng $ parent và bạn sẽ thấy thuộc tính testvalue ở đó - một thuộc tính có tên này dường như chỉ nằm trong phạm vi cha mẹ tại thời điểm này.
Bây giờ, hãy xóa bảng điều khiển, nhập vào hộp văn bản và nhấp lại vào liên kết "hiển thị phạm vi". Bạn sẽ thấy rằng phạm vi "Con" hiện có thuộc tính testvalue mới. Nó đổ bóng/ẩn thuộc tính cha. Vì vậy, mọi thứ trong phạm vi con nhìn thấy thuộc tính testvalue phạm vi con, và những thứ trong phạm vi cha mẹ thấy thuộc tính testvalue phạm vi cha mẹ.
Cập nhật: FYI, tôi gần đây đã viết một câu trả lời sâu rộng/bài viết về phạm vi thừa kế nguyên mẫu giải thích các khái niệm trên một cách chi tiết hơn nhiều, với rất nhiều hình ảnh: What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
Nguồn
2012-12-12 23:48:49
Cảm ơn, đó là chính xác nó. Đây có phải là "lỗi" trong góc cạnh hay là mục đích/dự kiến này? – Caleb
Tôi sẽ không thực sự gọi nó là "lỗi". Nó chỉ là vấn đề làm thế nào các đối tượng javascript và nguyên thủy làm việc khi chúng được thông qua xung quanh. Nếu bạn là một var được thiết lập để một chuỗi và bạn vượt qua nó vào một chức năng, chức năng có thể thay đổi nó tất cả nó muốn, và nó sẽ không ảnh hưởng đến giá trị của var gốc. Nếu biến đó được đặt thành một đối tượng, thì đó là một tham chiếu được truyền vào và bất kỳ thay đổi nào được thực hiện cho nó trong hàm sẽ ảnh hưởng đến đối tượng mà biến gốc đã tham chiếu. Hy vọng điều này có ý nghĩa. – dnc253
Vâng, điều đó có ý nghĩa hoàn hảo. Cảm ơn bạn! – Caleb