从字符串开始过滤
FilterBy from Start of String
按照目前的情况,filterBy 过滤器会在整个字符串中查找匹配值。例如,如果我按 "e" 过滤,过滤后的结果可能包含:
"Entertainment",
"Internet",
"Services".
有没有办法让我指示 filterBy 从字符串的开头开始匹配并忽略其余部分,以便从该集合返回的唯一结果是 "Entertainment"?
您可以编写自己的 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/
按照目前的情况,filterBy 过滤器会在整个字符串中查找匹配值。例如,如果我按 "e" 过滤,过滤后的结果可能包含: "Entertainment", "Internet", "Services".
有没有办法让我指示 filterBy 从字符串的开头开始匹配并忽略其余部分,以便从该集合返回的唯一结果是 "Entertainment"?
您可以编写自己的 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/