我正在尝试使用angular-ui typeahead指令。所需的结果是输入框应根据已键入的内容仅显示已过滤的项目。我的代码显示了所有项目。
我在http://plnkr.co/edit/8uecuPiVqmEy6gFQYeXC
为代码创建了一个plunker它出了什么问题?非常感谢你。
万一你无法访问plunker,相关的html代码就是这样;
<div class='container-fluid' ng-controller="TypeaheadCtrl">
<h4>Testing angular-ui Typeahead</h4>
<!-- <pre>Model: {{asyncSelected | json}}</pre> -->
<input type="text" ng-model="typeahead" typeahead="names for names in getName($viewValue) " class="form-control">
</div>
相关的JS代码是这样的;
function TypeaheadCtrl($scope, $http)
{
// Any function returning a promise object can be used to load values asynchronously
$scope.getName = function(val)
{
return $http.get('test.json')
.then(function(res)
{
var names = [];
angular.forEach(res.data, function(item)
{
names.push(item.name);
});
return names;
});
};
}
来自http get的json文件看起来像这样;
[
{
"name": "Tom"
},
{
"name": "Tom2"
}
]
答案 0 :(得分:1)
因为你总是返回未经过滤的数组,所以很可能在服务器端完成,但如果数组是静态的,你可以这样做:
http://plnkr.co/edit/kxOlmnjGA7wX7zhS67aK?p=preview
angular.module('plunker', ['ui.bootstrap']);
function TypeaheadCtrl($scope, $http) {
// Any function returning a promise object can be used to load values asynchronously
$scope.getName = function(val) {
return $http.get('test.json')
.then(function(res) {
var names = [];
angular.forEach(res.data, function(item) {
if (item.name.toLowerCase().indexOf(val.toLowerCase()) > -1) {
names.push(item.name);
} else {
console.log(item);
}
});
return names;
});
};
}