【问题标题】:AngularJS md-autocomplete search for a string within a stringAngularJS md-autocomplete 在字符串中搜索字符串
【发布时间】:2017-04-27 14:33:05
【问题描述】:
如何配置md-autocomplete,以便在搜索单词时,它会在字符串中搜索字符串。目前它只找到第一个单词。
与演示 https://material.angularjs.org/latest/demo/autocomplete 一样,如果您键入 new,它会找到 New Jersey。但是如果你输入 jersey,它什么也找不到。
这是我的querySearch 函数
function querySearch(query) {
var results = query ? vm.subjects.filter(createFilterFor(query)) : vm.subjects,
deferred;
return results;
}
这是我的createFilterFor 函数
function createFilterFor(query) {
var lowercaseQuery = angular.lowercase(query);
return function filterFn(subject) {
return (subject.Display.indexOf(lowercaseQuery) === 0);
};
}
【问题讨论】:
标签:
angularjs
md-autocomplete
【解决方案1】:
我是这样解决的。注意有一个带有标签的数组和不用于显示的数组。
function querySearch(query) {
var results = new Array();
for (var i = 0, len = taggedSubjectArrray.length; i < len; i++) {
var txtToCompare = taggedSubjectArrray[i].Display;
if (txtToCompare.indexOf(query) != -1)
{
// string was found
// Add to results
results.push(validationArrray[i]);
}
}
return results;
}
【解决方案2】:
//This worked for me
function createFilterFor(query) {
debugger;
//var lowercaseQuery = angular.lowercase(query);
return function filterFn(product) {
var results = new Array();
var lowercaseQuery = angular.lowercase(query);
index = 0,
res = [];
res.push(-1);
//Get starting index of each word in string & push in array
while ((index = product.value.indexOf(' ', index + 1)) >= 0) {
res.push(index);
}
for (var i = 0; i < res.length; i++) {
var a = res[i] + 1;
if (product.value.indexOf(lowercaseQuery) === a)
{
return (product.value.indexOf(lowercaseQuery) === a);
}
}
};
}