filter:notarray array Erwartet, aber bekommen: 0
controller
@RequestMapping(value = "/graphs", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Collection<Graph> getSkeletonGraph()
{
log.debug("REST request to get current graphs");
return graphService.getSkeletonGraphs();
}
Winkel-call
$scope.graphs = [];
Graph.getGraphs().$promise.then(function(result)
{
$scope.graphs = result;
});
angular.module('sampleApplicationApp').factory('Graph', function($resource)
{
return {
getGraphs: function() {
return $resource('api/graphs/:id').query();
}
};
})
Ich bin nicht sicher, warum die Verwendung der filter, bekomme ich die exception.
sah auch in eckig doc https://docs.angularjs.org/error/filter/notarray
Mein Ergebnis ist array aber nicht sicher, warum ich immer eine solche Ausnahme.
Beispiel-Ergebnis von backend bin ich immer.
[{"id":"135520b0-9e4b-11e5-a67e-5668957d0149","area":"Bingo","models":[],"enumerateds":[]},{"id":"0db925e0-9e53-11e5-a67e-5668957d0149","area":"jin","models":[],"enumerateds":[]},{"id":"7a717330-9788-11e5-b259-5668957d0149","area":"Product","models":[],"enumerateds":[]},{"id":"402d4c30-980f-11e5-a2a3-5668957d0149","area":"fgfgfg","models":[],"enumerateds":[]},{"id":"404b77b0-9e53-11e5-a67e-5668957d0149","area":"olah","models":[],"enumerateds":[]},{"id":"cd071b10-9e52-11e5-a67e-5668957d0149","area":"lolo","models":[],"enumerateds":[]},{"id":"d9808e60-9710-11e5-b112-5668957d0149","area":"catalog","models":[],"enumerateds":[]},{"id":"2aaca9f0-97e2-11e5-91cd-5668957d0149","area":"btg","models":[],"enumerateds":[]},{"id":"955e9ed0-978c-11e5-93fd-5668957d0149","area":"promotions","models":[],"enumerateds":[]},{"id":"1e441d60-980f-11e5-a2a3-5668957d0149","area":"hjuhh","models":[],"enumerateds":[]},{"id":"fb96dfe0-978d-11e5-93fd-5668957d0149","area":"voucher","models":[],"enumerateds":[]}]
html
<li ng-repeat="g in graphs track by $index | filter:searchText"></li>
InformationsquelleAutor Saurabh Kumar | 2015-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem, weil Sie mit
track by $index
bevor Sie sich bewerben, Ihre filter. Um dies zu beheben, ändern Sie Ihren Ausdruck:Den
track by
Ausdruck sollte immer die Letzte, nachdem alle Ihre Filter. Seine eine Regel erwähnt, die in den docs: ngRepeatErklärung:
Wenn Sie nicht verwenden
track by $index
imngRepeat
der input für alle Filter verwendet, ist das array, das heißt, wenn seinedann
items
ist der Eingang, der an die Filter standardmäßig aktiviert, und die Filterung erfolgt über diesen Eingang.Jedoch, wenn Sie
track by $index
die Eingabe der Filter wird$index
stattitems
und daher der Fehler:Daher, um dem entgegenzuwirken, wird das array zuerst Durchlaufen alle Filter und das gefilterte Ergebnis wird mit
track by $index
.Hoffe, das klärt es auf.
Seine eine Regel erwähnt, die in der Dokumentation. Filter angewendet werden soll, bevor der track-by-Ausdruck. Finden Sie in docs: docs.angularjs.org/api/ng/directive/ngRepeat
Nachdem ich 2 Stunden versucht herauszufinden, warum der filter auf die Winkel-website bei der Arbeit war und war mir nicht das war die einzige Antwort, die mein problem gelöst! Unnötig zu sagen, würde ich wohl auch benötigen zum öffnen und Lesen wieder die docs. Jedoch ist es sehr anti-intuitiv, und der Fehler überhaupt nicht helfen, warum
track by $index
sollte immer der Letzte Ausdruck? Macht keinen Sinn in meinem Kopf.Es gibt einen Grund dafür. Wenn Sie nicht verwenden
track by $index
der input für alle Filter ist das array, das heißt, wenn seineitem in items
, Elemente die übergebene Eingabe zu filtern. Jedoch, wenn Sietrack by $index
die Eingabe der Filter wird$index
stattitems
und daher der Fehler: Expected array (items
), jedoch erhalten 0($index
). Hoffe, das klärt es auf.Brillant, verbrachte mehr als eine Stunde
InformationsquelleAutor Tarun Dugar
Sollten Sie immer
track by
am Ende des AusdrucksDa während der Auswertung eines Ausdrucks für
ng-repeat
eckige braucht das endgültige Ergebnis für track durch zu arbeiten. Wenn Sie es am Ende, Ihre filter werden angewendet undtrack by
berechnet auf die endgültige Ausgabe. Sehen Sie den source-code in eckigen docs.Laut der Dokumentation von
ng-repeat
InformationsquelleAutor Vivek