Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS md自动完成返回所有可能的子字符串_Angularjs_Search_Angular Material - Fatal编程技术网

AngularJS md自动完成返回所有可能的子字符串

AngularJS md自动完成返回所有可能的子字符串,angularjs,search,angular-material,Angularjs,Search,Angular Material,我用它来让用户搜索我大学里的科目 问题是我的搜索功能仅按顺序(从左到右)搜索每个显示值 例如:如果我搜索“艺术与建筑”,我会得到“未找到结果”,这是我不希望发生的 我希望《艺术与建筑》能给出一个结果 主题采用以下格式: $scope.subjects = [ { value: 'AA', display: 'AA - Arts and Architecture' }, { value: 'AAAS', display: 'AAAS - African/

我用它来让用户搜索我大学里的科目

问题是我的搜索功能仅按顺序(从左到右)搜索每个显示值

例如:如果我搜索“艺术与建筑”,我会得到“未找到结果”,这是我不希望发生的

我希望《艺术与建筑》能给出一个结果

主题采用以下格式:

$scope.subjects = [
  {
    value: 'AA',
    display: 'AA - Arts and Architecture'
  },
  {
    value: 'AAAS',
    display: 'AAAS - African/Afr Amer Studies'
  },
  {
    value: 'ABA',
    display: 'ABA - Applied Behavior Analysis'
  },
  {
    value: 'ABE',
    display: 'ABE - Ag and Biological Engineering'
  }
]
以下是我的搜索方法:

$scope.searchQuery = function(text) {
  text = text.toUpperCase();
  var result = $scope.subjects.filter(function(item) {
    return item.display.includes(text);
  });
  return result;
}
这是我的html:

<md-autocomplete 
   md-selected-item="selectedItem"
   md-search-text="searchText" 
   md-items="item in searchQuery(searchText)" 
   md-item-text="item.display" 
   md-min-length="0" 
   placeholder="Select a subject">
  <md-item-template>
    <span md-highlight-text="searchText">{{item.display}}</span>
  </md-item-template>
  <md-not-found>
    No matches found.
  </md-not-found>
</md-autocomplete>

{{item.display}
没有找到匹配项。

根据文档JS方法
str.includes(searchString[,position])
说明:

参数:位置->可选。字符串中开始搜索的位置 用于搜索字符串。(默认值为0)

因此,您的代码是从索引0开始的

改用indexOf怎么样?更改此行:
return item.display.includes(文本)


返回项目。显示。索引(文本)!=-1;

问题

这是因为区分大小写,也就是说,你实际上在做与

"Arts and Architecture".includes("ARTS AND ARCHITECTURE"); // false
…由于区分大小写,因此返回
false
。它恰好在字符串的开头起作用,因为所有字母都是大写的,输入也是大写的:

"AA".includes("AA"); // true (fluke!)
解决方案

如果您使
项.显示
文本
均为大写,则应能正常工作:

$scope.searchQuery = function(text) {
  var result = $scope.subjects.filter(function(item) {
    return item.display.toUpperCase().includes(text.toUpperCase());
  });
  return result;
}
“includes”函数仅检查目标字符串中是否存在搜索字符串。要使md autocomplete正常工作,您需要匹配包含搜索文本或部分搜索文本的数组中的对象。将代码修改为:

$scope.searchQuery = function(text) {
    var result = $scope.subjects.filter(function(item) {
       if (item.display.toUpperCase().indexOf(text.toUpperCase()) >-1)
          return item;
});
    return result;
}

没问题,你可以随时投票!很高兴这有帮助。