Javascript 为什么这个有角度的ui提前键入代码返回所有项而不是过滤项?

Javascript 为什么这个有角度的ui提前键入代码返回所有项而不是过滤项?,javascript,angularjs,angular-ui,typeahead,angular-ui-typeahead,Javascript,Angularjs,Angular Ui,Typeahead,Angular Ui Typeahead,我正在试用angular ui typeahead指令。理想的结果是,输入框应仅显示基于键入内容的过滤项。我的代码显示所有项目 我已经在为代码创建了一个plunker 怎么了?多谢各位 为了防止您无法访问plunker,相关的html代码如下所示 <div class='container-fluid' ng-controller="TypeaheadCtrl"> <h4>Testing angular-ui Typeahead</h4> &l

我正在试用angular ui typeahead指令。理想的结果是,输入框应仅显示基于键入内容的过滤项。我的代码显示所有项目

我已经在为代码创建了一个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>
[
{
    "name": "Tom"   
},
{
    "name": "Tom2"  
}
]
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;
      });
  };
}
http get中的json文件如下所示:

<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>
[
{
    "name": "Tom"   
},
{
    "name": "Tom2"  
}
]
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;
      });
  };
}

因为您总是返回未经过滤的数组,这很可能是通过服务器端完成的,但如果数组是静态的,则可以执行以下操作:


请问您的意见是在服务器端还是前端angularjs进行过滤更好?这取决于您有多少数据,但通常在服务器端更好,以减少从服务器传递到客户端的数据量