2013-02-11 26 views
202

Tôi muốn sử dụng chỉ mục của danh sách mẹ (foos) làm đối số cho một cuộc gọi hàm trong danh sách con (foos.bars).Chỉ mục truy cập của phụ huynh ng-lặp lại từ con ng-repeat

Tôi đã tìm thấy bài đăng mà người nào đó đề xuất sử dụng $ parent. $ Index, nhưng $index không phải là tài sản của $parent.

Tôi làm cách nào để truy cập chỉ mục của phụ huynh ng-repeat?

<div ng-repeat="f in foos"> 
    <div> 
    <div ng-repeat="b in foos.bars"> 
     <a ng-click="addSomething($parent.$index)">Add Something</a> 
    </div> 
    </div> 
</div> 
+2

Có vẻ như nó hoạt động chính xác với tôi. Tôi đã viết một plunker để hiển thị nó hoạt động: http://plnkr.co/edit/BenCDh4NUGPPHKWGsGMr?p=preview Bạn có thể cung cấp thêm chi tiết không? – Piran

+0

Cảm ơn bạn vì điều đó. Nó khiến tôi tìm ra vấn đề của mình là một lỗi trong đánh dấu của tôi. – Coder1

+0

@ Coder1, vui lòng xem xét xóa câu hỏi này. –

Trả lời

264

Mã ví dụ của tôi là chính xác và vấn đề khác trong mã thực tế của tôi. Tuy nhiên, tôi biết rất khó để tìm các ví dụ về điều này vì vậy tôi trả lời nó trong trường hợp người khác đang tìm kiếm.

<div ng-repeat="f in foos"> 
    <div> 
    <div ng-repeat="b in foos.bars"> 
     <a ng-click="addSomething($parent.$index)">Add Something</a> 
    </div> 
    </div> 
</div> 
+13

Ngoài ra, điều này đã ném tôi một thời gian.Nếu có chỉ thị data-ng-switch trong mã của bạn, bạn sẽ cần phải tăng thêm mức độ phạm vi- ($ parent. $ Parent. $ Index). Không đẹp, tôi biết. –

+0

Đồng ý. Tôi cần phải chuyển $ parent. $ Parent. $ Index sang hàm điều khiển của tôi để lấy giá trị đúng nhưng sau đó liên kết ng-show của tôi thành $ parent. Dường như một lỗi góc cạnh cho tôi –

+0

Tôi có thể làm điều gì đó như thế này nếu tôi có một Bộ sưu tập lặp lại cùng với ng-lặp lại không? Rõ ràng nó đang trở về không được xác định đang thực hiện giống như –

209

Theo tài liệu ng-repeat http://docs.angularjs.org/api/ng.directive:ngRepeat, bạn có thể lưu chỉ mục khóa hoặc mảng trong biến bạn chọn. (indexVar, valueVar) in values

vì vậy bạn có thể viết

<div ng-repeat="(fIndex, f) in foos"> 
    <div> 
    <div ng-repeat="b in foos.bars"> 
     <a ng-click="addSomething(fIndex)">Add Something</a> 
    </div> 
    </div> 
</div> 

Một mức tăng vẫn còn khá sạch với $ mẹ. Index $ nhưng nhiều bậc phụ huynh lên, mọi thứ có thể nhận được lộn xộn.

Lưu ý: $index sẽ tiếp tục được xác định ở mỗi phạm vi, không được thay thế bằng fIndex.

+0

Tôi không hiểu Ghi chú. Không phải là toàn bộ vấn đề này bởi vì điều đó không đúng? –

+15

Đây phải là câu trả lời được xác thực vì nó sạch hơn '$ parent. $ Index' – lisztomania

+1

@ adam-beck Tôi nghĩ rằng chúng có nghĩa là khi sử dụng phương thức' (fIndex, f) 'này, chỉ số $ sẽ vẫn được xác định (không bỏ qua) - vì vậy chỉ mục có thể truy cập được như cả '$ index' và' fIndex'. –

40

Hãy xem my answer to a similar question.
Bằng cách đặt bí danh $index, chúng tôi không phải viết những thứ điên rồ như $parent.$parent.$index.


Way tao nhã hơn giải pháp whan $parent.$index đang sử dụng ng-init:

<ul ng-repeat="section in sections" ng-init="sectionIndex = $index"> 
    <li class="section_title {{section.active}}" > 
     {{section.name}} 
    </li> 
    <ul> 
     <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu(sectionIndex)" ng-repeat="tutorial in section.tutorials"> 
      {{tutorial.name}} 
     </li> 
    </ul> 
</ul> 

Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info

+1

+1, đây là trực tiếp từ tài liệu góc – AlexFoxGill

+3

cũng an toàn hơn! nếu bạn thêm một ng-if bên trong vòng lặp, bạn sẽ nhận được $ index messed, kiểm tra: http://plnkr.co/52oIhLfeXXI9ZAynTuAJ – gonzalon

+0

Tôi phải làm sectionIndex = $ parent. $ index – Beanwah

2

Bạn chỉ có thể sử dụng sử dụng $ mẹ $ index .where mẹ sẽ đại diện cho đối tượng của cha mẹ lặp đi lặp lại. vật .

12

Bạn cũng có thể kiểm soát các chỉ số ông bà bằng đoạn mã sau

$parent.$parent.$index 
+0

Điều này làm việc tốt cho dự án của tôi. Cảm ơn bạn đã cung cấp giải pháp tuyệt vời! –

+0

Điều này không thể mở rộng, rõ ràng. –

-1

$ cha mẹ không làm việc nếu có nhiều bậc cha mẹ. thay vào đó, chúng tôi có thể xác định biến chỉ mục cha trong init và sử dụng biến số

<div data-ng-init="parentIndex = $index" ng-repeat="f in foos"> 
    <div> 
    <div data-ng-init="childIndex = $index" ng-repeat="b in foos.bars"> 
     <a ng-click="addSomething(parentIndex)">Add Something</a> 
    </div> 
    </div> 
</div> 
+0

xem câu trả lời từ vucalur ở đây nó cũng đề cập đến điều này. Nói chung đây là cách chính xác để đi IMO và thường chỉ sử dụng đúng cho ng-init. Bất cứ lúc nào mọi người đang đạt tới $ parent bạn đang yêu cầu gặp rắc rối khi bối cảnh mã của bạn thay đổi. – shaunhusain

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