Ich ging durch Beispiele in einem der Angular JS-Bücher, die ich habe und stieß auf etwas, das ich nicht klar verstehe. Es hat mit benutzerdefiniertem Filter und ng-repeat zu tun. Hier sind die Codes"Schlüssel ist nicht definiert" in AngularJS benutzerdefinierte Filterfunktion
Der folgende Code ist der Controller an HTML Body Tag angehängt.
angular.module("sportsStore").controller("sportsStoreCtrl", function ($scope) {
$scope.data = {
products: [
{
name: "Product #1",
description: "A product",
category: "Category #1",
price: 100
},
{
name: "Product #2",
description: "A product",
category: "Category #1",
price: 100
},
{
name: "Product #3",
description: "A product",
category: "Category #2",
price: 210
},
{
name: "Product #4",
description: "A product",
category: "Category #3",
price: 202
}
]
};
});
Der Code für den benutzerdefinierten Filter ist
angular.module("customFilters", []).filter("unique", function() {
return function (data, propertyName) {
if (angular.isArray(data) && angular.isString(propertyName)) {
var results = [];
var keys = {};
for (var i = 0; i < data.length; i++) {
var val = data[i][propertyName];
if (angular.isUndefined(keys[val])) {
keys[val] = true;
results.push(val);
}
}
return results;
} else {
return data;
}
}
});
Was ist der benutzerdefinierte Filter im Grunde tun soll eine Liste von Kategorien in $ scope.data.products erstellen.
Der Code funktioniert einwandfrei. Was ich nicht verstehe, ist die Rolle von "var keys = {};" in den benutzerdefinierten Filterfunktionen.
Was ist die Absicht, Variablen "Schlüssel" zu haben und den Wert ihrer Eigenschaften auf wahr zu setzen?
haben Sie versucht, es ohne 'keys [val] = true' zu laufen, um zu sehen, welchen Unterschied es macht? Ich kann den Titel Ihrer Frage nicht in Ihrer Frage finden – Jorg