У меня есть угловое приложение, которое использует ng-repeat-start для отображения некоторой динамической информации.Ручное переключение по ссылке с ng-repeat
<div>
<table>
<tbody>
<tr my-directive ng-repeat="data in vm.data">
<td ng-bind="data.id"></td>
<td ng-bind="data.id"></td>
</tr>
<tr ng-repeat-end>
<td>extrarow</td>
</tr>
</tbody>
</table>
</div>
Я также построил директиву, которую я хочу использовать, чтобы применить класс для всей тра в зависимости от значения некоторых данных. Я хотел использовать ссылку, чтобы сделать это вместо использования $ watch.
Как само по себе может содержать много внутри, я хотел использовать transclude для этого. Я не хочу, тег должен быть вставлен в моей таблице, так как это нарушает все мои стили, так что я должен сделать это вручную, что-то вроде этого:
function myDirective() {
return {
transclude: true,
scope: {},
link: function($scope, $element, $attrs, $ctrl, $transclude) {
var cloned = $transclude();
$element.append(cloned);
}
}
}
Проблема заключается в том, это не работает, как ожидалось. Клонированный объект присоединяется только к последней строке ng-repeat. Вероятно, это связано с объектом $ element, но я не уверен в этом.
Я воспроизвел проблему в этом jsfiddle.
Любые идеи о том, где проблема? Большое спасибо.
Не уверен, что вы пытаетесь достичь, но удалить transclude: истинное от вашей директивы, https://jsfiddle.net/tf9s7skq/1/ Если вы просто пытаетесь установить TR класс на основе данных, используйте element.css() - переключение выглядит неправильно. – RamblinRose
Не уверен, что такое transclude: false делает, но вы правы, все мои элементы отображаются, но также и ошибка, поскольку $ transclude больше не является функцией. Кроме того, последний
Хорошо, @RamblinRose, я просто понимаю, что вы правы, так как у меня нет шаблона, мне не нужно использовать transclude, это намного проще. Спасибо – David