2012-11-19 21 views
14

Có thể thêm nội dung vào đánh dấu dựa trên điều kiện không? Giống như trong ví dụ này, khi tôi muốn thêm td chỉ vào lần lặp đầu tiên (chỉ cho phần tử đầu tiên của myData)?Điều kiện thêm các yếu tố trong khối ng lặp lại

<tr ng-repeat="m in myData"> 
    <td>{{m.Name}}</td> 
    <td>{{m.LastName}}</td> 

    @if myData.indexOf(m) = 0 then // something like that 
    <td rowspan ="{{m.length}}"> 
     <ul> 
     <li ng-repeat="d in days"> 
      {{d.hours}} 
     </li> 
     </ul> 
    </td> 
</tr> 

Trả lời

16

Vâng, AngularJS có 2 chỉ thị cho dịp này:

  • Gia đình ng-show/ng-hide của chỉ thị có thể được sử dụng để ẩn (bằng sử dụng quy tắc hiển thị CSS) các bộ phận của DOM ba dựa trên kết quả của việc đánh giá một biểu thức.
  • Nếu chúng tôi muốn xóa/thêm các phần vật lý của DOM theo điều kiện họ của ng-switch chỉ thị (ng-switch, ng-switch-khi, ng-switch-default) sẽ có ích.

Vào cuối ngày cả hai giải pháp sẽ cung cấp cho cùng một hiệu ứng hình ảnh nhưng cấu trúc DOM cơ bản sẽ khác nhau. Đối với các trường hợp sử dụng đơn giản, ng-show/ng-hide có thể là OK, nhưng các phần lớn hơn của DOM phải được xử lý bằng ng-switch.

Đối với trường hợp sử dụng từ câu hỏi này, tôi sẽ tư vấn bằng cách sử dụng ng-switch.

+1

Chỉ cần thêm. $ index có chỉ mục hiện tại của mục, do đó, ng-show = "$ index == 0" –

+4

Theo góc 1.1.5, bạn cũng có thể sử dụng 'ng-if =" biểu thức của bạn "' chỉ thị. Bạn thêm nó làm thuộc tính cho bất kỳ phần tử nào. Nếu nó hợp lệ thành true, nó sẽ thêm phần tử đó vào dom. – EnigmaRM

3

Giải pháp tốt nhất nên là:

<tr ng-repeat="m in myData"> 
    <td>{{m.Name}}</td> 
    <td>{{m.LastName}}</td> 

    <td ng-if="$first" rowspan="{{myData.length}}"> 
     <ul> 
      <li ng-repeat="d in days"> 
       {{d.hours}} 
      </li> 
     </ul> 
    </td> 
</tr> 
Các vấn đề liên quan