【发布时间】:2016-04-15 04:48:38
【问题描述】:
我目前在我的控制器中使用内置的角度过滤器“$filter”来过滤数据的下拉列表,但过滤器根本没有正确过滤数据。它对其进行过滤,但过滤后的数据与输入的文本不匹配。我在读到,在 1.3 中,对象和数组的过滤器状态可能存在一些问题?我想知道这是版本问题还是我在代码中做错了什么?我正在考虑升级到 1.5,所以我只是好奇我的问题是否会在 1.5 中得到解决,或者我是否有语法错误。这是我所拥有的:
DATA(这是被 ng 重复的初始数据以及被过滤的内容:
this.items = [
{ name: 'Jim', city: 'Minneapolis', state: 'MN', zip: 44332 },
{ name: 'Boe', city: 'Scottsdale', state: 'AZ', zip: 44332 },
{ name: 'Tom', city: 'S.F.', state: 'CA', zip: 11223 },
{ name: 'Joe', city: 'Dallas', state: 'TX', zip: 34543 },
{ name: 'Jon', city: 'L.A.', state: 'CA', zip: 56433 },
];
模板:
<input type="text" class="form-control" name="inputField" ng-change="ctrl.filterTextChangeLocal($event)" ng-model="ctrl.ngModelValue" ng-click="ctrl.openDropdown($event)" />
上面的输入过滤下面的列表:
<ul class="dropdown-menu list-group" ng-if="!ctrl.ngDisabled">
<li class="list-group-item" ng-repeat="row in ctrl.filteredItems"
ng-mousedown="ctrl.onSelectedLocal(row, $event)">
{{row[ctrl.itemDisplayProperty]}}
</li>
<li class="list-group-item text-center" ng-show="ctrl.filteredItems.length <= 0">
{{ctrl.noResultsMessage}}
</li>
</ul>
控制器:
// filter the drodpown data
//$event is being used to check for specific keypresses but doesn't matter here
//ngModelValue is bound to ng-model inside the input
public filterTextChangeLocal($event: ng.IAngularEvent) {
this.filteredItems = this.$filter("filter")(this.items, this.ngModelValue);
}
上面的结果是一个简单的 bootstrap ul 下拉列表,它会在列表中的对象上显示指定的属性,这里它会显示上面显示的数据中的 name 属性,但是这个数据没有被正确过滤:
<li>Jim</li>
<li>Boe</li>
<li>Tom</li>
<li>Joe</li>
<li>Jon</li>
谢谢
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-ng-repeat angular-filters