Ich habe eine HTML-Vorlage, die Daten aus dem Array des Controllers lädt und in einer Tabelle speichert. Auch ich habe eine Direktive, die die Einbeziehung in Tabellenzeilen macht. Das Datenarray wird auf API-Anfragen gefüllt. Nach den neuen Anfragen habe ich die Anfrageergebnisse in meiner Tabelle zusammengeführt. Eine Reihe von Zeilen wird für jede Anfrage hinzugefügt, anstatt vorhergehende Ergebnisse zu löschen.vorherige Daten vor Anforderung löschen
Ich habe über meinen Controller-Code debugged, um den Zustand meines Arrays zu überprüfen, und es wird vor jeder Anfrage gelöscht. Das ist sicher. Jedoch werden neue Ergebnisse zu vorherigen hinzugefügt. Ich denke, der Grund könnte in meiner Vorlage der Transklusionsrichtlinie liegen.
Die Vorlage sieht so aus:
<div class="row">
<div class="col-md-12">
<div id="results" ng-show="results.length > 0">
<table class="table result-table">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="result in results" my-result></tr>
</tbody>
</table>
</div>
</div>
</div>
Hier ist der Code meiner Einbindung Direktive ist:
angular.module('app').directive('myResult',
['$compile',
function ($compile) {
return {
transclude: true,
templateUrl: '/Scripts/app/templates/resultTemplate.html',
compile: function (tElement, tAttr, transclude) {
var contents = tElement.contents().remove();
var compiledContents;
return function (scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents, transclude);
}
compiledContents(scope, function (clone, scope) {
iElement.replaceWith(clone);
});
};
}
}
}]);
Und schließlich die für Einbindung verwendet Vorlage:
<tr class="big-bord">
<td colspan="4"><h3>{{result.fullName}}</h3></td>
</tr>
<tr ng-repeat="item in result.items">
<td>{{item.value1}}</td>
<td>{{item.value2}}</td>
<td>{{item.value3}}</td>
<td>{{item.value4}}</td>
</tr>
Wie kann ich Löschen Sie meine Ergebnisse vor jeder API-Anfrage?
Welche Version von Angular verwenden Sie? Laut den Angular 1.4-Dokumenten wurde compile (transclude) als veraltet eingestuft. – jbrown
jbrown, verwende ich Angular 1.5.7. Was kommt anstelle der Transkription? – Waldemar
Der Angular Docs-Status "verwenden Sie stattdessen die Transclude-Funktion, die an die Link-Funktion übergeben wird". Lesen Sie hier mehr: https://docs.angularjs.org/api/ng/service/$compile – jbrown