AngularJS 显示基于 ng-model 的列表项

AngularJS Show List Items based on ng-model

我正在尝试创建一些功能,让用户有一个输入框并隐藏下面的所有数据 (li's)。 然后,当用户在输入框中键入内容时,将显示与该文本匹配的那些 li。

使用 angular 执行此操作的最佳方法是什么?我在下面设置了plunker: http://plnkr.co/edit/T6JOBJE4LrAtshbmaoPk?p=preview

我正在考虑将 li 设置为:

li {
 display: none;
}

然后打算尝试使用 ng-model 作为值的 ng-if。像这样:

  <div class="input-group">
    <span class="input-group-addon" id="basic-addon1">Search</span>
    <input type="text" class="form-control" ng-model="search">
  </div>    
    <ul>
      <li ng-repeat="x in data | filter:search " ng-if="!search">{{x.name}}</li>
    </ul>

有人可以帮我指明正确的方向吗?即使它只是解释逻辑。

您可以将 ng-show 属性设置为您的 <ul> 标签,您将在其中查看 search 变量的长度,如果它大于零,将显示您的过滤结果列表.所以,你不需要任何 css.

<ul ng-show="search.length">
  <li ng-repeat="x in data | filter:search ">{{x.name}}</li>
</ul>

Demo on plunker.

您的部分问题是过滤匹配空搜索字符串。您可以创建一个自定义过滤器来处理这个问题,例如 http://plnkr.co/edit/i4lsuVUmOLO3pbISu7FR?p=preview

$scope.filterName = function(datum) {
  console.log($scope.search, datum);
  return $scope.search !== '' && datum.name.indexOf($scope.search) !== -1;
};

在模板中使用如下:

<ul>
  <li ng-repeat="x in data | filter:filterName">{{x.name}}</li>
</ul>

如果你想在未来调整它,你可以更好地控制过滤器。