angularjs: почему фильтр не работает?

#angularjs

#angularjs

Вопрос:

Пожалуйста, помогите исправить скрипт.

HTML:

             <li ng-repeat="date in dateArr | dateFormatter}">
                <span class="date">{{date}}</span>
            </li>
  

js:

 angular.module('App', [])
    .controller('lsController', function ($scope) {
        $scope.dateArr = [
            '10.10.2016',
            '11.10.2016',
            '12.10.2016',
            '13.10.2016',
            '14.10.2016',
            '15.10.2016'
        ];   

        /*$scope.dateFormatter = function(date) {
            return date.slice(0, 6);               
        }*/     
    })
    .filter('dateFormatter', function (date) {
        return date.slice(0, 6); 
    });      
  

Я использую angular 1.4.8

JSFIDDLE

Мне нужно использовать фильтр, который обрезает строку данных

Ответ №1:

Ваш фильтр сконструирован неправильно.

Фильтр должен возвращать функцию, которая содержит аргументы для фильтрации и возвращает результат

 .filter('dateFormatter', function () {
      return function(dateString){
         return dateString.slice(0, 6); 
      }
});
  

Тогда у вас есть этот набор для фильтрации в ng-repeat, но, поместив его туда, нужно будет вернуть отфильтрованный массив, а не ввод строки и манипуляции. Поэтому его нужно поместить туда, куда вы передаете строку

 <li ng-repeat="date in dateArr">
        <span class="date">{{date | dateFormatter}}</span>
</li>
  

DEMO

Ответ №2:

Ваш фильтр неверен. Проверьте документацию de filter для получения более подробной информации

 .filter('dateFormatter', function () {
    return function(date){
        return date.slice(0, 6)
    } 
});  
  

Кроме того, неправильным является то, как вы используете свой фильтр. Выньте его из ng-repeat

 <span class="date">{{date | dateFormatter }}</span>
  

СКРИПКА