2016-04-12 6 views
0

Как и в настоящий момент фильтр filterBy ищет совпадающие значения по всей строке. Например, если я фильтрую с помощью «e», результаты фильтрации могут повлечь за собой: «Развлечения», «Интернет», «Услуги».FilterBy от начала строки

Есть ли способ для меня направить filterBy, чтобы начать сопоставление с начала строки и игнорировать остальные, так что единственным результатом, который возвращается с этого набора, является «Развлечения»?

ответ

3

Вы можете написать свой собственный Filter и проверить indexOf поле, которое вы ищете.

Допустим, у вас есть

<div id="app"> 
    <input v-model="search"> 
    <div v-for="item in items | startsWith search 'name'"> 
    {{ item.name }} 
    </div> 
</div> 

Тогда ваш фильтр может выглядеть примерно так:

Vue.filter('startsWith', function (array, search, field) { 
    if (!search.length) return array; 

    return array.filter(function(element) { 
    return element[field].toLowerCase().indexOf(search.toLowerCase()) === 0; 
    }) 
}) 

Вот краткие демо: https://jsfiddle.net/jb22wp1b/

+0

Очень высокая оценка, он работает после добавления чека undefined: if (search === undefined ||! search.length) return array; – Frisbetarian

+0

Вы должны определять поиск в своих данных. –

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