2015-08-21 5 views
1

У меня есть эта коллекция курсов:Как создать фильтр в Angularjs?

[{ id: 1, courseId: 2, text: 'John' }, 
    { id: 2, courseId: 2, text: 'Willi' }, 
    { id: 3, courseId: 2, text: 'Inga' }, 
    { id: 4, courseId: 1, text: 'Jerry' }, 
    { id: 5, courseId: 1, text: 'Michael' }, 
    { id: 1, courseId: 3, text: 'John' }, 
    { id: 2, courseId: 3, text: 'Willi' }, 
    { id: 3, courseId: 4, text: 'Inga' }, 
    { id: 4, courseId: 5, text: 'Jerry' }, 
    { id: 5, courseId: 5, text: 'Michael' }] 

И у меня есть этот массив идентификаторов:

[{"id": 3},{"id": 2},{"id": 1}] 

Мне нужно фильтровать массив курсов по массиву идентификаторов (т.е. для отображения только текстовые курсов, есть courseId = 3,2,1):

ng-repeat="course in courses| customFilter: [{"id": 3},{"id": 2},{"id": 1}]" 

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

Любая идея, как я могу реализовать customFilter для этой цели?

+0

https://docs.angularjs.org/guide/filter#creating-custom-filters –

ответ

3

Вы можете создать свой собственный filter, чтобы предоставить вам отфильтрованные значения, фильтр должен принимать массив элементов в качестве массива фильтров.

Markup

ng-repeat="course in courses| customFilter: [{"id": 3},{"id": 2},{"id": 1}]"" 

Фильтр

app.filter('customFilter', function(){ 
    return function(array, filterArray){ 
    var ids = []; 
    angular.forEach(filterArray, function(val, index) { 
     ids.push(val.id); 
    } 
    return array.filter(function(value){ 
     return ids.indexOf(value.id) !== -1; 
    }); 
    } 
}) 
+0

, у меня есть этот формат фильтра: customFilter: [ {"id": 3}, {"id": 2}, {"id": 1}] " Не это: customFilter: [3,2,1]" – Michael

+0

почему вам нужен такой фильтр. Не упростите это? –

+0

, потому что этот результат я получаю от serivce. И мне нужно держать его в foramt как abouve – Michael

0

Я создал фильтр в проекте angularJs.

в моем имени углового приложения является угловым.

var app = angular.module('angularApp', []); // This is your main angular app. 

Теперь вы хотите создать фильтр для декодирования URL.

app.filter('decodeURL', function() { 
    return function(text) { 
     if(text) { 
      return text.split(' ').join('-').toLowerCase().replace(/[^a-z0-9]+/g, '-'); 
     } 
    } 
}); 

выше код, чтобы создать фильтр для декодирования URL. И мое имя фильтра - «decodeURL». мы будем использовать decodeURL в качестве фильтра в моем коде , как если ваш URL это-

http://www.example.com/test1 test2 TES3

затем процеживают сделать URL как this-

http://www.example.com/test1-test2-tes3

Как использовать этот фильтр в html-

<a ui-sref="{{business.category[0].categoryName.toLowerCase()}}Detail({id:business.id,title:(business.title | decodeURL)})"></a> 

// Вышеупомянутая информация относится к государственной маршрутизации в угловом режиме.

<a href="/coupon/{{coupon.id}}/{{coupon.title | decodeURL}}" 
             class="btn btn-warning show-btnhome show-button-margin">Show</a> 

// Приведенный выше код URL перенаправления.

Please see in the snapshots

Please see in the snapshots

Please see in the snapshots