2013-08-28 18 views
9

Câu hỏi của tôi tương tự như this one, nhưng thay vì hàng trước, tôi muốn nó nối thêm.AngularJS - nối thêm hàng sau phần tử theo chỉ thị

này không hoạt động:

app.directive('createTable', function ($compile) { 
    return { 
    link: function (scope, element, attrs) { 
     var contentTr = angular.element('<tr><td>test</td></tr>'); 
     contentTr.parentNode.insertBefore(element, contentTr.nextSibling); 
     $compile(contentTr)(scope); 
    } 
    } 
}); 

Trả lời

16

này không được công việc:

app.directive('createTable', function ($compile) { 
    return { 
     link: function(scope, element, attrs) { 
      if (element.next().length) { 
       element.next().insertBefore(element); 
      } 

      var contentTr = angular.element('<tr><td>test</td></tr>'); 
      contentTr.insertAfter(element); 
      $compile(contentTr)(scope); 
     } 
    } 
}); 

http://jsfiddle.net/3gt9J/3/

+16

jqLite không có insertAfter vì vậy nếu bạn không sử dụng jQuery, bạn phải sử dụng. Sau đó thay thế. – Andrew

+0

Câu hỏi: tại sao bạn cần trao đổi các yếu tố? Tôi không rõ lý do tại sao nó không "chỉ làm việc" nếu bạn gắn thêm các phần tử được chèn vào phần tử hiện tại. – Claudiu

+0

Trao đổi là cần thiết vì mỗi hàng lặp lại hiển thị ở vị trí ban đầu (trước khi bất kỳ hàng nào chúng tôi đã thêm vào). Vì vậy, trao đổi chỉ kiểm tra nếu có một hàng nối sau và di chuyển nó trước hàng hiện tại. – noj

3

tôi nghĩ rằng bạn cần

app.directive('createTable', function ($compile) { 
    return { 
     link: function (scope, element, attrs) { 
      var contentTr = angular.element('<tr><td>test</td></tr>'); 
      contentTr.insertAfter(element); 
      $compile(contentTr)(scope); 
     } 
    } 
}); 

Demo: Fiddle

+1

Cảm ơn, nhưng nó không hoạt động như tôi muốn - nó nối thêm tất cả các hàng ở cuối bảng. Xem cập nhật của tôi: http://jsfiddle.net/3gt9J/2/ – kuboslav

0

Chỉ muốn thêm thứ gì đó vì tôi đã có vài phút cho đến khi nó hoạt động. Nếu bạn không có jQuery trong dự án của bạn, bạn không thể sử dụng insertAfter. Chỉ cần sử dụng after() từ jQuery API .after()

Tôi cần thêm một số yếu tố trong chỉ thị của mình giữa các trẻ khác.

element.children().eq(0).after(angular.element('<p>Test</p>'));