Ich habe eine einfache Direktive erstellt, die verwendet wird, um Text in einer <td>
anzuzeigen, wenn keine Tabellendaten (dh "No results found") den gesamten Inhalt belegt Reihe der Tabelle. Vorher hatte ich nur statischen Text in der <td>
, aber jetzt möchte ich in der Lage sein, ein beliebiges DOM hinein zu setzen. Ich habe versucht, ng-transclude
zu meiner Direktive hinzuzufügen, aber jetzt macht es das Element auf eine merkwürdige Weise.Die Verwendung von ng-transclude scheint in einer Tabelle nicht gut zu funktionieren
Hier ist meine Richtlinie:
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;
}
});
}
};
}]);
Es im Grunde hält gerade Spur des Datensatzes (Array) und überprüft die Länge, um zu sehen, ob es irgendwelche Daten ist oder nicht. Wenn dies der Fall ist, zeigen wir diese Zeile mit ngIf
an.
Meine html sieht genauso aus wie diese
<tr sk-no-result="model.dataSet">Here is my text I want to transclude into my directive</tr>
Das Problem ist, dass der transkludiert Text in das DOM als nur einen textNode eingeführt wird und über den <table>
anstatt nach innen von ihm erscheinen. Irgendeine Idee, warum das passiert?
Ach du hast Recht ... Es mag nicht die Verwendung des Element-Tags in der Tabelle in diesem Szenario. Ich musste es nur als Attribut verwenden –
einfach, sobald Sie wissen, wie: P Danke. – Kieran