Javascript 角度过滤器在1.3版中过滤不正确,在1.5版中是否更好?
我目前正在使用控制器中的内置角度过滤器“$filter”来过滤数据下拉列表,但该过滤器根本无法正确过滤数据。它会对其进行过滤,但过滤后的数据与正在键入的文本不匹配。我读到,在1.3中,在对象和数组上,过滤器的状态可能会出现一些问题?我想知道这是一个版本问题还是我在代码中做了一些不正确的事情?我正在考虑升级到1.5,所以我只是好奇我的问题是否能在1.5中得到解决,或者我是否有语法错误。以下是我所拥有的: 数据(这是正在重复的初始数据以及正在过滤的内容:Javascript 角度过滤器在1.3版中过滤不正确,在1.5版中是否更好?,javascript,angularjs,angularjs-directive,angularjs-ng-repeat,angular-filters,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Repeat,Angular Filters,我目前正在使用控制器中的内置角度过滤器“$filter”来过滤数据下拉列表,但该过滤器根本无法正确过滤数据。它会对其进行过滤,但过滤后的数据与正在键入的文本不匹配。我读到,在1.3中,在对象和数组上,过滤器的状态可能会出现一些问题?我想知道这是一个版本问题还是我在代码中做了一些不正确的事情?我正在考虑升级到1.5,所以我只是好奇我的问题是否能在1.5中得到解决,或者我是否有语法错误。以下是我所拥有的: 数据(这是正在重复的初始数据以及正在过滤的内容: this.items = [
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 },
];
<li>Jim</li>
<li>Boe</li>
<li>Tom</li>
<li>Joe</li>
<li>Jon</li>
模板:
<input type="text" class="form-control" name="inputField" ng-change="ctrl.filterTextChangeLocal($event)" ng-model="ctrl.ngModelValue" ng-click="ctrl.openDropdown($event)" />
上面的结果是一个简单的引导ul下拉列表,该列表将在列表中的对象上显示指定的属性,这里它将显示上面显示的数据中的name属性,但未正确过滤此数据:
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 },
];
<li>Jim</li>
<li>Boe</li>
<li>Tom</li>
<li>Joe</li>
<li>Jon</li>
吉姆
感谢角度过滤器工作完美,问题可能出在您的实现中……以下是您的工作示例: 编辑:如果要根据
属性
、名称筛选数组,则需要在items | filter:{key:value}中指示筛选项。
这是一个参考:
函数TestCtrl($scope,data){
var vm=$scope;
vm.items=数据;
vm.query='';
}
有棱角的
.module('测试',[]))
.value('数据'[
{姓名:'Jim',城市:'Minneapolis',州:'MN',邮编:44332},
{名称:'Boe',城市:'Scottsdale',州:'AZ',邮编:44332},
{姓名:'Tom',城市:'S.F.,州:'CA',邮编:11223},
{姓名:'Joe',城市:'Dallas',州:'TX',邮编:34543},
{姓名:'Jon',城市:'L.A.,州:'CA',邮编:56433},
])
.controller('TestCtrl',['$scope','data',TestCtrl])
;
@import”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css";
.表格组{
垫面:1米;
垫底:1.5em;
}
-
-
角度过滤器工作正常,问题可能出在您的实现中……以下是您的工作示例:
编辑:如果要根据属性
、名称筛选数组,则需要在items | filter:{key:value}
中指示筛选项。
这是一个参考:
函数TestCtrl($scope,data){
var vm=$scope;
vm.items=数据;
vm.query='';
}
有棱角的
.module('测试',[]))
.value('数据'[
{姓名:'Jim',城市:'Minneapolis',州:'MN',邮编:44332},
{名称:'Boe',城市:'Scottsdale',州:'AZ',邮编:44332},
{姓名:'Tom',城市:'S.F.,州:'CA',邮编:11223},
{姓名:'Joe',城市:'Dallas',州:'TX',邮编:34543},
{姓名:'Jon',城市:'L.A.,州:'CA',邮编:56433},
])
.controller('TestCtrl',['$scope','data',TestCtrl])
;
@import”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css";
.表格组{
垫面:1米;
垫底:1.5em;
}
-
-
您应该将过滤器更改为-
public filterTextChangeLocal($event: ng.IAngularEvent) {
this.filteredItems = this.$filter("filter")(this.items, {'name':this.ngModelValue});
}
您应该按如下方式更改过滤器-
public filterTextChangeLocal($event: ng.IAngularEvent) {
this.filteredItems = this.$filter("filter")(this.items, {'name':this.ngModelValue});
}
这似乎也没有正确过滤。如果我在输入中按“a”,我只会得到带有“a”的名称在它们中,在这种情况下是没有的,因为它会过滤模型的每个属性。a
字符出现在其他字段中,而不仅仅出现在name
中。看看我上次的编辑。是的,好的,这是我意识到的。我有过滤整个对象的功能,但更多的是停留在单个属性上玩过了。不过我已经猜到了这一部分。非常感谢您的时间。还有一个问题:如何使筛选器动态化,以便用户可以根据对象中显示的属性进行筛选,例如,如果用户传入项display property=“city”然后,下拉列表将显示我帖子中对象中的所有城市。如果它们以“状态”传递,它将过滤状态。但是组件的用户指定要传递的数据,因此它们可能具有一个名为“地址”的属性如果他们传入,我需要将筛选器传递给fitler以获取地址。这适用于静态筛选:This.filteredItems=This.$filter(“筛选器”)(This.items,{name:This.ngModelValue});但是当我尝试通过这样做使其动态化时:This.filteredItems=This.$filter(“筛选器”)(This.items,{This.itemsDisplayProperty:This.ngModelValue});它不会运行,因为我不能在同一个对象中两次使用“this”,而该对象似乎也没有正确过滤..如果我在输入中按“a”,我应该只能得到带有“a”的名称在它们中,在这种情况下是没有的,因为它会过滤模型的每个属性。a
字符出现在其他字段中,而不仅仅出现在name
中。看看我上次的编辑。是的,好的,这是我意识到的。我有过滤整个对象的功能,但更多的是停留在单个属性上玩过了。不过我已经猜到了这一部分。非常感谢您的时间。还有一个问题:如何使筛选器动态化,以便用户可以根据对象中显示的属性进行筛选,例如,如果用户传入项display property=“city”然后,下拉列表将显示我帖子中对象中的所有城市。如果它们以“状态”传递,它将过滤状态。但是组件的用户指定要传递的数据,因此它们可能具有一个名为“地址”的属性如果他们传入,我需要将筛选器传递给fitler以获取地址。这适用于静态筛选:This.filteredItems=This.$filter(“filter”)(This.items,{name:This.ngModelValue});但是当我