Обмен данными между функциями в angularjs

0

Я пытаюсь реализовать две функции в угловом приложении, но как только я реализую фильтр (начинаем с букв от до), код перестает работать. Собственные функции (добавление/удаление) работают, но как только я перехожу к данным на завод и пытаюсь получить доступ к функциям фильтра, они не работают.

Рабочие функции:

$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 буквы

Полный код здесь: скрипка

Теги:
scope

1 ответ

0
Лучший ответ

Там есть несколько вопросов в скрипке. Сначала я вижу ошибку "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" >

Скрипт с этими исправлениями

  • 1
    Привет, Шейлак, большое спасибо за внимание. Часть вашего ответа мне до сих пор неясна, но на проблему $ scope.filter определенно стоит обратить внимание! В идеале я хочу создать целую службу фабрики контактов, с которой я начал играть здесь jsfiddle.net/Tupira/5dn2mtb8/426, но у меня все еще возникают проблемы с получением доступа моего контроллера к фабричной службе. Но это другая нить.
  • 0
    Привет, Шейлак, есть ли проблема с различными версиями angularjs с вашим jsfiddle выше? Всякий раз, когда я добавляю что-либо выше углового 1.2, он выдает ошибку « docs.angularjs.org/error/ng/… ». Чем это вызвано?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню