AngularJS md-autocomplete поиск строки в строке
Как вы настраиваете md-autocomplete
так что если вы ищете слово, оно ищет строки в строках. На данный момент он находит только первое слово. Как и в демоверсии https://material.angularjs.org/latest/demo/autocomplete, если вы печатаете new, он находит Нью-Джерси. Но если вы наберете майку, то ничего не найдете.
Это мое 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);
};
}
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);
}
}
};
}
Я решил это таким образом. Обратите внимание, что есть массив с тегами и и массив без использования для отображения.
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;
}