假设我以ng-repeat以表格格式显示以下数据。
<div class="form-group"> <label >Search</label> <input type="text" ng-model="search" class="form-control" placeholder="Search"> </div> <table class="table table-striped table-hover"> <thead> <tr> <th>Id</th> <th>First Name</th> <th>Last Name</th> <th>Hobby</th> </tr> </thead> <tbody> <tr ng-repeat="user in users|filter:search"> <td>{{user.id}}</td> <td>{{user.first_name}}</td> <td>{{user.last_name}}</td> <td>{{user.hobby}}</td> </tr> </tbody> </table>
以上代码取自http://code.ciphertrick.com/2015/06/01/search-sort-and-pagination- ngrepeat-angularjs/
这样我们就可以搜索。无论用户在搜索文本框中输入哪种内容,都将基于该过滤器生成数据,但是我的要求有些不同。
我将有一个下拉列表,其中将填充所有字段名称,并且用户将选择字段名称并将值放在文本框中,并且将在该特定字段名称而不是整个结果集上搜索数据。我怎么能做到这一点。
寻找指导。
从Angular文档改编为filter的东西可以正常工作。
<label>Search In: <select ng-model="ctrl.searchField"> <option value="_id">ID</option> <option value="name">Name</option> <option value="phone">Phone #</option> <option value="dob">Birthday</option> </select> <label>Search For: <input ng-model="ctrl.searchText"></label> <table id="searchTextResults"> <tr> <th>ID</th> <th>Name</th> <th>Phone</th> <th>Birthday</th> </tr> <tr ng-repeat="friend in ctrl.friends | filter:ctrl.filterList"> <td>{{friend._id}}</td> <td>{{friend.name}}</td> <td>{{friend.phone}}</td> <th>{{friend.dob.toDateString()}}</th> </tr> </table>
angular.module("filterApp", []).controller("filterDemo", filterDemo) function filterDemo() { let vm = this; vm.searchField = "" vm.searchText = "" vm.friends = [{ _id: 12323, name: 'Will', phone: '555-1276', dob: new Date(1990,00,20) }, { _id: 34645764576, name: 'Mike', phone: '555-4321', dob: new Date(1967,01,02) }, { _id: 6565656795, name: 'Toni', phone: '555-5678', dob: new Date(1967,05,21) }, { _id: 2565656, name: 'Leilani', phone: '808-BIG-WAVE', dob: new Date(2007,01,01) }, { _id: 67567567, name: 'Julie', phone: '555-8765', dob: new Date(1991,12,01) }, { _id: 477676767, name: 'Juliette', phone: '555-5678', dob: new Date(1991,12,01) }, { _id: 2565656, name: 'Mary', phone: '800-BIG-MARY', dob: new Date(1991,12,01) }] vm.filterList = filterList function filterList(row) { if (vm.searchField && vm.searchText) { let propVal = row[vm.searchField] if (propVal) { return propVal.toString().toUpperCase().indexOf(vm.searchText.toUpperCase()) > -1; } else { return false; } } return true; }; }
这是一个有效的Codepen:http ://codepen.io/anon/pen/yOjdJV?editors=1010