根据选择值筛选angularjs

Sta*_*rfs 12 angularjs angularjs-ng-repeat ng-options angular-filters

这看起来应该很容易,但我是棱角分明的新手并没有很好地理解这个概念.我希望在数据集上运行ng-repeat,然后能够使用完全相同的数据集根据选择框中的选定选项过滤结果.

我创建了一个选项数组,并将它们分配给变量$ scope.OurTeamCategories.

angular.module('app', [])
.controller('Main', ['$scope', function($scope) {
   $scope.ourTeamCategories = [
        {"id":18,"title":'Management'},
        {"id":19,"title":'Administration'},
        {"id":21,"title":'Designers'},
        {"id":22,"title":'Accounts'},
    ]
}]);
Run Code Online (Sandbox Code Playgroud)

然后在HTML文件中,我使用ng-options动态创建选择框,并使用ng-repeat创建这些类别的列表.这一切都很好,但现在我希望能够过滤

<div ng-app="app">
  <div ng-controller="Main">
    <select name="show-filter"  ng-model="catFilter" ng-options="category.title for category in ourTeamCategories">
          <option value="{{category.id}}"></option>
      </select>

  <li ng-repeat="cat in ourTeamCategories">
      <h3>{{cat.title}}</h3>
      <!-- for testing -->
     <b>input: {{catFilter.id}}</b> - - ID: {{cat.id}}
  </li>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我以为我可以通过以下方式运行过滤器,但是我收到了一个错误.谁能告诉我我做错了什么?

<li ng-repeat="cat in ourTeamCategories | filter {cat.id:catFilter.value}">
Run Code Online (Sandbox Code Playgroud)

我在这里创建了一个plunker:http://plnkr.co/edit/YwHknAm3X2NUdxDeUjS8?p = preview

Pan*_*kar 18

你需要在你的文件管理器中提到直接id,这样id会通过ourTeamCategoriesid 查找并获得更准确的结果true.最后添加将确保完全匹配而不是包含&也错过冒号:

<li ng-repeat="cat in ourTeamCategories | filter : {id: catFilter.id}: true">
Run Code Online (Sandbox Code Playgroud)

更新

你是在同一时间喜欢两种方法混合起来ng-options使用ng-repeat.我认为你应该坚持ng-options,所以在你当前的ng-option中设定title你的价值ng-model

<select name="show-filter" ng-model="catFilter" 
   ng-options="category as category.title for category in ourTeamCategories">
</select>
Run Code Online (Sandbox Code Playgroud)

这里有叉子Plunkr