2014-11-04 30 views
38

Tôi cần một chỉ số $ thứ hai cho vòng lặp ng lặp lại lồng nhau của tôi. Tôi nên đặt nó ở đâu và ở đâu?

AngularJS site nói

Tạo bí danh cho các đặc tính này có thể với ngInit. Ví dụ: này có thể hữu ích khi lồng ghép ngRepeats.

<div ng-repeat="person in persons track by $index"> 
    <div ng-repeat="something in array track by $index2"> <!-- where to init this and how to manage it?--> 

Nếu tôi sử dụng $ index một lần nữa, có vẻ như để làm việc nhưng tôi không chắc chắn đây là điều đúng đắn? Tôi chắc chắn có một cách thực hiện dễ dàng và chính xác, tôi không thể tìm thấy một ví dụ.

Cảm ơn

Trả lời

109

$index sẽ tham khảo các chỉ số trên phạm vi trong cùng ngRepeat, vì vậy nếu đó là những gì bạn cần, bạn chỉ có thể sử dụng nó.

Tài liệu mô tả là trường hợp bạn cần truy cập vào $index trong phụ huynh ngRepeat. Bạn có thể lấy nó theo một vài cách: Một là sử dụng $parent và một cách khác là sử dụng ngInit, như tài liệu Góc được đề xuất. Dưới đây là một ví dụ ...

<li ng-repeat="thing in things" ng-init="parentIndex = $index"> 
    {{ $index }} 
    <ul> 
     <li ng-repeat="value in thing.values"> 
      {{ value }} 
      {{ $index }} <!-- inner $index --> 
      {{ $parent.$index }} <!-- parent $index --> 
      {{ parentIndex }} <!-- also parent $index --> 
     </li> 
    </ul> 
</li> 

Fiddle

+0

Chính xác những gì tôi muốn biết. Có một chút nhầm lẫn với các tài liệu. Cảm ơn bạn – trainoasis

+0

Đáng chú ý là nó hoạt động cho mọi đối tượng javascript có sẵn. Tôi đã sử dụng nó để tạo một bí danh cho các vòng ngoài $ boolean cuối cùng để làm cho nó có sẵn trong vòng lặp bên trong. – Skurpi

+2

Bởi rất rất rất cẩn thận với cách tiếp cận này nếu bạn có ý định xóa bất kỳ mục danh sách sau này từ mảng. Ví dụ: nếu bạn xóa bất kỳ mục mảng nào từ mảng 'things', thì chỉ mục $ sẽ tự cập nhật để phản ánh trạng thái mới của mảng, nhưng' parentIndex' sẽ vẫn trỏ đến chỉ mục của mục đã xóa. Đây sẽ là vấn đề lớn khi nói đến xóa. 'ParentIndex' sẽ phản ánh chính xác khi bạn đã lưu trạng thái và làm mới trang, tức là bạn phải hiển thị lại danh sách mảng để hiển thị các chỉ mục được cập nhật. Tôi đã tìm ra điều này sau khi đấu tranh với nó trong 3 ngày. – Devner

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