Я пытаюсь реализовать две функции в угловом приложении, но как только я реализую фильтр (начинаем с букв от до), код перестает работать. Собственные функции (добавление/удаление) работают, но как только я перехожу к данным на завод и пытаюсь получить доступ к функциям фильтра, они не работают.
Рабочие функции:
$scope.items = items;
$scope.deleteItem = function (index) {
items.data.splice(index, 1);
}
$scope.addItem = function (index) {
items.data.push({
Name: $scope.newItemName
});
}
Что заставляет все это сломать:
//filtering letters _ NOT WORKING
function setLetters (from, to){
this.fromLetter = from;
this.toLetter = to;
}
//----
$scope.filter.startsWithLetter = function () {
return function (items, fromLetter, toLetter) {
var filtered = [];
for (var i = 0; i < items.length; i++) {
var item = items[i];
var firstLetter = item.Name.substring(0, 1).toLowerCase();
if ((!fromLetter || firstLetter >= fromLetter)
&& (!toLetter || firstLetter <= toLetter)) {
filtered.push(item);
}
}
return filtered;
};
});
/ / --filtering буквы
Полный код здесь: скрипка
Там есть несколько вопросов в скрипке. Сначала я вижу ошибку "Unexpected token )"
из-за лишнего )
в строке 58.
Затем, когда я исправляю, что в строке 45 есть проблема, поскольку вы пытаетесь присвоить значение $scope.filter.startsWithLetter
, когда $scope.filter
не определен. Я думаю, вы хотите присвоить значение $scope.startsWithLetter
.
По-прежнему существует проблема с фильтрацией. При фильтрации с помощью ng-repeat
вы можете указать фильтр или просто функцию предиката. В каждом случае аргументы, переданные функции, будут разными - прочитайте документы. Функция as-is предназначена для использования в фильтре, созданном с angular.module('myApp', []).filter()
. Он не работает, когда вы устанавливаете его в области видимости и передаете его для filter:
как предикатная функция. Если вы предпочитаете фильтровать с помощью функции в области, а не создавать повторно используемый настраиваемый фильтр, вам нужно изменить его, чтобы принять правильные аргументы - см. Скрипт.
Ваша страница пытается получить доступ к setLetters
в $scope.items.data
но вы не устанавливаете $scope.items.data.setLetters
. Я не думаю, что имеет смысл устанавливать его внутри items.data
любом случае. Может быть, установить его непосредственно в сфере? Я также установил бы fromLetter
и toLetter
непосредственно в область.
Я также перемещал кнопки setLetter внутри <div ng-controller="ItemsController" >
Скрипт с этими исправлениями