Utworzono prostą dyrektywę, która służy do wyświetlania tekstu w pliku <td>
, gdy brak danych tabeli (np. "Nie znaleziono wyników") zajmuje całe rząd tabeli. Zanim jeszcze miałem statyczny tekst w <td>
, ale teraz chcę móc umieścić w nim dowolny DOM. Próbowałem dodać ng-transclude
do mojej dyrektywy, ale teraz jest renderowanie elementu w dziwny sposób.Korzystanie z polecenia ng-transclude nie działa dobrze w tabeli
Oto moja dyrektywa:
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;
}
});
}
};
}]);
To w zasadzie tylko śledzi zbiorze danych (array) i sprawdza długość, aby zobaczyć, czy nie ma żadnych danych, czy nie. Jeśli tak jest, wyświetlamy ten wiersz przy pomocy ngIf
.
Moje html właśnie wygląda ten
<tr sk-no-result="model.dataSet">Here is my text I want to transclude into my directive</tr>
Problem polega na tym, że dołączany tekst jest włożona do DOM jak tylko textNode i pojawia się powyżej <table>
raczej niż wewnątrz niej. Jakiś pomysł dlaczego tak się dzieje?
Och, masz rację ... Nie podoba mi się użycie znacznika elementu wewnątrz stołu w tym scenariuszu. Po prostu potrzebowałem go użyć jako atrybutu –
łatwo, gdy już wiesz, jak: P Dzięki. – Kieran