Я изучаю AngularJS, следуя книге, но я застрял в некоторых строках кода, которые вряд ли объясняются в книге.У меня проблема с пониманием кода в AngularJS
Так это selectCategory() функция включена в нг-клик директивы
<a ng-click="selectCategory()">Home</a>
<a ng-repeat="item in data.products | orderBy:'category' | unique:'category'"
ng-click="selectCategory(item)">
{{item}}
</a>
, а также вот фильтр, который используется для фильтрации списка продуктов на основе их категорий, когда директива нг щелчок запускается
ng-repeat="item in data.products | filter:categoryFilterFn">
эти два определяются следующим образом:
angular.module("sportsStore")
.controller("productListCtrl", function ($scope, $filter) {
var selectedCategory = null;
$scope.selectCategory = function (newCategory) {
selectedCategory = newCategory;
}
$scope.categoryFilterFn = function (product) {
return selectedCategory == null ||
product.category == selectedCategory;
}
});
Я уже много времени пытался понять этот код, но я все еще довольно смущен, особенно о том, как определяются две функции. Почему в аргументе также включен $ filter? А также вы можете объяснить эти определения, пожалуйста, я действительно потерян. Простите меня за новичка и огромное спасибо!
и не нужно вводить $ filter в этот контроллер (нет необходимости добавлять его в качестве аргумента) – christina
Привет, извините, мой поздний ответ. Код в примере действительно правильный. Поправьте меня, если я ошибаюсь, позвольте мне немного объяснить и посмотреть, если я это правильно понимаю. $ scope.data выглядит примерно так, { \t продуктов: [ \t {имя: "Продукт # 1", описание: "Продукт", \t категория: "Категория # 1", цена: 100} , \t {...}, \t {...}]} так что «элемент» на самом деле относится к целому {} блока, а потому, что есть «уникальный» фильтр, пункт теперь относится только к категории , – jwong
Когда нажата кнопка «Главная», вызывается selectCategory(). Поскольку аргумент не передается, «newCategory» имеет значение null, так что «selectedCategory» также является нулевым, и это делает categoryFilterFn неспособным фильтровать что-либо, чтобы продукты всех категорий были указаны в «Главная». Но если в вызове передается «элемент», относящийся к одной из категорий, переменная «selectedCategory» больше не пуста, так что «categoryFilterFn» может фильтровать все продукты этой категории. – jwong