2016-09-13 3 views
1

У меня есть простой пагинации с буквами:Bind данные пагинацией для фильтрации в угловых

<div ng-controller="DataController"> 
    <ul class="pagination"> 
    <li ng-repeat="letter in data_letters"> 
     <a href="#" ng-click="setLetter(letter)">{{letter}}</a> 
    </li> 
    </ul> 
    <table class="table table-striped"> 
    <tbody> 
     <tr> 
     <th>Name</th> 
     <th>State</th> 
     </tr> 
     <tr ng-repeat="person in persons | startsWithLetter:letter"> 
     <td>{{person.Name}}</td> 
     <td>{{person.State}}</td> 
     </tr> 
    </tbody> 
    </table> 
</div> 

Что это самый простой способ, чтобы связать письмо (на который мы нажали на paginaton) к фильтру таблицы. Полностью функциональный plunkr: http://plnkr.co/edit/Trr5LzrcMfZqonD0jvjX?p=preview

У меня все уже реализовано. Это просто привязка данных, которая отсутствует. Есть идеи?

ответ

0

Одна из проблем с вашим кодом является то, что вы излишни инъекционной $ объема в фильтр :

app.filter('startsWithLetter', function($scope) { 

следует be

app.filter('startsWithLetter', function() { 

Другая проблема заключается в использовании значения «C-D» в качестве значения фильтра. Я хотел бы изменить $ scope.data_letters быть массивом объектов, которые содержат ключ/значение пары, как это:

$scope.data_letters = [{ 
    key: 'A', 
    value: "A" 
}, { 
    key: "B", 
    value: "B" 
}, { 
    key: ['C', 'D'], 
    value: "C-D" 
}]; 

Затем изменить чек в фильтре, чтобы оценить все ключи, как это:

angular.forEach(letters, function(letter, key) { 
    if (itemName.startsWith(letter)) { 
     filtered.push(items[i]); 
    } 
    }); 

Вы можете видеть, как это работает here, где я разветвил ваш плунжер.

+0

спасибо, что сработало очень хорошо :) –

+0

Добро пожаловать. – jbrown

0

Обновлено ваш звенеть here

Проблема в том, что ваш фильтр не был признан угловой. Кроме того, я предложил бы использовать

Инструменты разработчика Chrome

это показывает, полезные отладочную информация

app.filter('startsWithLetter', function() { 

    console.log("Inside startsWithLetter"); 
    return function(items, letter) { 

    console.log("Inside Filter: Starts with " + letter); 
    var filtered = []; 
    for (var i = 0; i < items.length; i++) { 
     var itemName = items[i].Name; 

     if (itemName.startsWith(letter)) { 
     filtered.push(items[i]); 
     } 
    } 
    return filtered; 
    }; 
}); 
Смежные вопросы