我使用ui.bootstrap typeahead作为
HttpClient
通过数据库中的$ http.get获取数据
uib-typeahead="search as search.name for search in vm.searching($viewValue)"
搜索指令看起来像这样
vm.searching = function() {
return $http.get('http://localhost:3000/api/allcoaches')
.then(function(response) {
return response.data;
});
};
response.data
.component('searchbox',{
restrict: 'E',
templateUrl: '/common/searchbox/searchbox.template.html',
bindings: {
text: '<'
},
controller: 'SearchBoxController',
controllerAs: 'vm'
});
它只是转向显示数据中的每个对象,而不仅仅是在搜索框中键入的内容。就像我输入&#39; a&#39;它返回所有&#39; a,b,c,d&#39;在下拉列表中。 我做错了什么?
答案 0 :(得分:2)
您没有在服务中进行任何过滤,而是获得API / allcoaches。将键入值传递给服务并获取过滤结果或在控制器中进行过滤。
如果您在控制器中进行内存中过滤,则无需每次都按服务。您可以获得所有教练一次(在此方法之外),然后在此方法中执行$ filter。
但我建议您在api中进行过滤并返回已过滤的列表。
再次决定在客户端或api中进行过滤取决于您的业务场景。如果您的数据库中有太多的教练,那么请在api中进行过滤。如果数据量较少,则通过点击api获取所有教练,将该列表保留在其中一个视图模型属性中,然后从该内存列表中过滤。