Angular JSの書籍の中で、私がよく理解していないものがありました。それはカスタムフィルタとng-repeatと関係があります。コードはこちらAngularJSのカスタムフィルター機能で「キーが定義されていません」
<a ng-click="selectCategory()" class="btn btn-block btn-default btn-lg">
Home
</a>
<a ng-repeat="item in data.products | orderBy: 'category' | unique: 'category'" ng-click="selectCategory(item)" class="btn btn-block btn-default btn-lg">
{{item}}
</a>
次のコードは、html bodyタグに付加されたコントローラです。
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
}
]
};
});
カスタムフィルタのコードは、カスタムフィルタは基本的に$のscope.data.productsのカテゴリのリストを作成されて行うことになっている何
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;
}
}
});
です。
コードは正常に動作しています。私が理解できないことは、 "var keys = {};"が果たす役割ですカスタムフィルター機能で使用できます。
可変 "キー"を持ち、プロパティの値をtrueに設定する意図は何ですか?
あなたは 'keys [val] = true'を付けずにそれを実行して、どのような違いがあるのか見てきましたか?あなたの質問のタイトルが質問に反映されていない – Jorg