Đây là một cách làm việc mà không sử dụng $parent
. Nó tìm kiếm lên trên thông qua các phạm vi lồng nhau để tìm đối tượng bạn đang sử dụng, tuy nhiên nhiều phạm vi mà nó phải trải qua.
Trong phạm vi có chứa danh sách, bạn có thể định nghĩa một đối tượng với danh sách như một tài sản, như thế này:
$scope.obj = {};
$scope.obj.items = ['item1','item2','item3'];
Sau đó, có cái nhìn ng-repeat
như thế này:
<div ng-repeat="item in obj.items | filter:'item3' track by $index">
{{obj.items[ obj.items.indexOf(item) ]}}
</div>
(bạn cần sử dụng obj.items[ obj.items.indexOf(item) ]
thay vì obj.items[ $index ]
vì $index
là chỉ mục của mảng đã lọc, không phải là bản gốc)
Lý do là vì trong khi obj
không tồn tại trong phạm vi hiện tại, khi bạn cố gắng truy cập thuộc tính của nó, Angular sẽ nhìn trên phạm vi hiện tại thay vì cung cấp cho bạn một lỗi (nếu bạn vừa thử {{obj}}
nó sẽ không xác định, và Angular sẽ rất vui khi không cho bạn thứ gì thay vì nhìn qua các phạm vi cao hơn). Đây là một liên kết hữu ích về phạm vi lồng nhau: http://www.angularjshub.com/examples/basics/nestedcontrollers/
Trong trường hợp của tôi, tôi cần sự track by $index
, vì tôi đã có một đầu vào với ng-model
ràng buộc vào một mục trong mảng, và bất cứ khi nào mô hình cập nhật, đầu vào sẽ làm mờ vì tôi nghĩ rằng HTML đã được hiển thị lại. Hệ quả của việc sử dụng track by $index
là các mục trong mảng với các giá trị giống nhau sẽ được lặp lại. Nếu bạn sửa đổi một trong những người khác hơn là người đầu tiên, những điều kỳ lạ sẽ xảy ra. Có lẽ bạn có thể lọc tính duy nhất để tránh điều đó.
Tôi tương đối mới đối với AngularJS, vì vậy hãy bình luận nếu có bất kỳ điều gì lớn tôi thiếu. Nhưng điều này làm việc, vì vậy tôi đang sử dụng nó ít nhất.
Nguồn
2015-05-24 10:16:06
Nó sẽ hoạt động. {{campaign.name}} có hoạt động ngoài ng-repeat không? – Anoop
Phạm vi con mà ng-repeat tạo ra thừa kế nguyên mẫu từ phạm vi gốc, vì vậy tất cả các thuộc tính được xác định trên phạm vi gốc sẽ được hiển thị trong phạm vi con ng lặp lại. Bạn có một chỉ thị khác được định nghĩa trên div hay bên trong nó không? –
OK. Tôi đạt được rồi. Cảm ơn cả hai vì ý kiến. –