Я создал простую директиву, которая используется для отображения некоторого текста в <td>
, когда нет данных таблицы (т.е. "Не найдено результатов" ) занимает всю строку таблицы. До того, как я просто разместил статический текст в <td>
, но теперь я хочу, чтобы в него был добавлен любой DOM. Я попытался добавить ng-transclude
в свою директиву, но теперь это странный способ визуализации элемента.
Вот моя директива:
app.directive('skNoResult', ['$rootScope', function () {
return {
restrict: 'A',
replace: true,
transclude: true,
template: '<tr ng-if="!hasResult"><td class="left" colspan="{{ colSpan }}"><ng-transclude></ng-transclude></td></tr>',
link: function (scope, elem, attrs, ctrl) {
var span = angular.element(elem).parents('tbody').siblings('thead').find('tr').children().length;
scope.colSpan = span;
scope.$watch(attrs.skNoResult, function (list) {
if (list.length) {
scope.hasResult = true;
} else {
scope.hasResult = false;
}
});
}
};
}]);
В основном он просто отслеживает набор данных (массив) и проверяет длину, чтобы увидеть, есть ли какие-либо данные или нет. Если есть, то мы выводим эту строку с помощью ngIf
.
Мой html просто выглядит как
<tr sk-no-result="model.dataSet">Here is my text I want to transclude into my directive</tr>
Проблема заключается в том, что переведенный текст вставляется в DOM как только текстовыйNode и появляется выше <table>
, а не внутри него. Любая идея, почему это происходит?