为什么这个angular-ui TypeAhead代码会返回所有项目而不是过滤项目?

时间:2014-05-21 10:38:35

标签: javascript angularjs angular-ui typeahead angular-ui-typeahead

我正在尝试使用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"  
}
]

1 个答案:

答案 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;
      });
  };
}