2016-12-29 6 views
0

У меня есть массив ($ scope.names), который содержит некоторые простые объекты, которые я применяю для очистки значений от диакритики. Когда я печатаю с консолью это значение, это показывает мне хорошо. Например: «La 45 km nord-vest de Bucureşti» будет «La 45 km nord-vest de Bucuresti».Фильтр AngularJS не работает

Я применяю этот метод и для другой переменной ($ scope.searchText), чтобы сделать совместимость с возможностью поиска. Опять же, все в порядке.

Проблема в том, что даже я стандартизую, что значение двух переменных, фильтр не работает. Если я попытаюсь найти «Bucures», он не покажет мне объект, содержащий чистое слово «Bucures» (оригинальное слово «Bucureş») ...

Что я делаю неправильно?

Полный код здесь: http://plnkr.co/edit/D5WfiOGd5I3QfcNVdOmr?p=preview

Угловое сценарий является то, что:

var app = angular.module('myApp', []); 
app.controller('namesCtrl', function($scope, $filter) { 
$scope.names = [ 
    { 
     "adresa": "Str. Calafatului nr. 10", 
     "latitudine": "44.1", 
     "localitatea": "GALICEA MARE", 
     "longitudine": "23.3", 
    }, 
    { 
     "adresa": "bd. Elisabeta nr. 1", 
     "latitudine": "44.170901", 
     "localitatea": "CONSTANŢA", 
     "longitudine": "28.663195", 
    }, 
    { 
     "POTLOGI": "La 45 km nord- vest de Bucureşti", 
     "latitudine": "44.564319", 
     "localitatea": "POTLOGI", 
     "longitudine": "25.588091", 
    } 
] 

$scope.searchText = ""; 
$scope.searchCleanText = ""; 
$scope.myFilter = function (items) { 
    for (var i = 0; i < items.length; i++) { 
     var boolChk = false; 
     angular.forEach(items[i], function (value, key) { 
      var cleanValue = removeDiacritics(value).toLowerCase(); 
      if (boolChk === false) { 
       boolChk = cleanValue.includes($scope.searchCleanText); 
      } 
      console.log(value + ' ' + cleanValue.includes($scope.searchCleanText) + '\tboolChk = ' + boolChk); 
      return boolChk; 
     }); 
    } 
} 

$scope.$watch('searchText', function() { 
     $scope.searchCleanText = removeDiacritics($scope.searchText).toLowerCase();   
     $scope.showItems = $filter('filter')($scope.names, $scope.searchText, $scope.myFilter($scope.names)); 
     console.log($scope.showItems); 
    }); 
}); 

ответ

0

Ответ это с помощью «функции (реально, как ожидается)» вернуть булево значение:

$scope.functionFilter = function (actual, expected) { 
    if (typeof actual === 'object') { 
     var obj = actual; 
     //console.log(obj); 

     var boolChk = false; 
     angular.forEach(obj, function (value, key) { 
      var cleanValue = removeDiacritics(value).toLowerCase(); 
      if (boolChk === false) { 
       boolChk = cleanValue.includes($scope.searchCleanText); 
      } 
     }); 
     console.log(obj); 
     console.log(boolChk); 
     return boolChk; 
    } 
} 
1

Я сделал некоторые изменения в код фильтра `

$scope.myFilter = function (item) { 
      //for (var i = 0; i < items.length; i++) { 
       var boolChk = false; 
       angular.forEach(item, function (value, key) { 
        var cleanValue = removeDiacritics(value).toLowerCase(); 
        if (boolChk === false) { 
         boolChk = cleanValue.includes($scope.searchCleanText); 
        } 
        console.log(value + ' ' + cleanValue.includes($scope.searchCleanText) + '\tboolChk = ' + boolChk); 
        return boolChk; 
       }); 
       return boolChk; 
      //} 
     } 

    $scope.$watch('searchText', function() { 
      $scope.searchCleanText = removeDiacritics($scope.searchText).toLowerCase();   
     $scope.showItems = $filter('filter')($scope.names, $scope.searchText, function(actual,expected){return $scope.myFilter(actual);}); 
     console.log($scope.showItems); 
    }); 

`

Проверьте наличие Plunk

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^