2013-03-08 19 views
38

Tôi đang cố gắng đặt id động cho div của tôi trong ng-repeat của tôi. Hãy để tôi cho thấy một ví dụ.id động ng-repeat

<div id="$index" ng-repeat="repeat in results.myJsonResults"> 
    <div id="$index" ng-click="saveID($index)" ng-repeat="subRepeat in results.myJsonResults.subresults"> 
</div> 

Vấn đề của tôi là khi tôi nhấp vào div con, tôi muốn đặt tên id cha, nhưng có vẻ như góc không đặt ID chính xác cho div. Có thể đặt ID động trong khái niệm này không?

PS: Tôi đã thử, trong quá khứ, tạo phương thức truy cập trên bộ điều khiển của tôi và đặt chỉ mục, nhưng hóa ra là góc chỉ nhận ra giá trị cuối cùng của ID này thay thế.

+0

bạn không thể lặp lại ID trang mà bạn đang làm. Tại sao bạn thậm chí cần một ID? – charlietfl

Trả lời

61

Để trả lời câu hỏi của bạn, hãy thử này:

<div id="{{$index}}" ...> 

Trong khi ở trên nên làm việc, điều này có thể không phải những gì bạn muốn thực sự (!). Xin lưu ý rằng điều này là khá hiếm với AngularJS để thao tác các phần tử bằng cách tham chiếu chúng bằng id.

Bạn nên tập trung vào mô hình của mình, mô tả giao diện người dùng và để AngularJS làm phần còn lại mà không thực hiện thao tác DOM cấp thấp "bằng tay".

+0

Bạn có một số ví dụ điển hình về hành vi tương tự một cách tốt? – marceloduende

+0

@marceloduende Bạn sẽ phải giải thích đầu tiên những gì bạn đang cố gắng để làm, nói một cách có chức năng ... Một plunk làm việc sẽ là lý tưởng. –

+0

Đồng ý. Cần thiết để thiết lập một id trong một repeater chắc chắn là một mùi mã. Tôi sẽ giả sử bạn sẽ sử dụng jquery vì lý do nào đó, và nếu đó là chính xác, sau đó bạn nên viết 'directive' cho rằng –

26

Một trường hợp sử dụng tôi có thể nghĩ ra được gắn <label> yếu tố với <input> yếu tố tương ứng của họ, như đã thấy trong http://jsfiddle.net/YqUAp/

Ứng dụng có a pkozlowski.opensource 's phương pháp

<label for="{{ 'textField-' + $index }}">Option {{ $index }}</label> 
<input type="text" id="{{ 'textField-' + $index }}" ng-model="field"/> 

Mặc dù tôi không chắc chắn nếu điều này là phương pháp hiệu quả nhất. (Ngay cả khi chỉ để dễ đọc)

+0

điều này dường như không hoạt động (cụ thể cho các yếu tố chọn với ng-options anyways) cho tôi trong góc 1.2rc3 –

+2

https://github.com/angular/angular.js/issues/4511 –

+0

Tôi làm chính xác điều này vì lý do tương tự.

4
<div id="{{$index}}" ...> 

Làm việc tốt, nhưng bạn cũng có thể đặt id động với trường lặp lại nếu - ví dụ - subRepeat sẽ có trường id. Đó sẽ là:

<div id="subRepeat{{subRepeat.id}}" ...> 

Điều đó sẽ đưa id như subRepeat1, subRepeat2, ... trên div lặp đi lặp lại của bạn

0

bạn cần phải giữ chỉ mục trong đối tượng của bạn

results = { myJsonResults : [ 
    { name: "abc", id: 1, subResults: [ 
           { subName: "123", id: 1 }, 
           { subName: "456", id: 2 }] } 
    { name: "xyz", id: 2, subResults: [ 
           { subName: "789", id: 1 }, 
           { subName: "098", id: 2 }] } 
          ] }; 

Ngoài ra bạn lặp lại đề cập đến kết quả, ngắt kết nối chúng, thay vào đó hãy sử dụng tính năng nàyResult:

<div id="thisResult.id" ng-repeat="thisResult in results.myJsonResults"> 
    {{ thisResult.name }} 
    <div id="subResult.id" ng-click="saveID(subResult.id)" ng-repeat="subResult in thisResult.subResults"> {{ subResult.subName }} </div> 
</div> 
Các vấn đề liên quan