我不明白为什么 .name 发生在模型中而不是过滤器中。当我创建 nameText.name 并将其绑定到我的数据时,我不明白幕后发生了什么。我的过滤器实际工作情况如何?
<input type="text" data-ng-model="nameText.name" />
<input type="text" data-ng-model="nameText.city" />
<li data-ng-repeat="customer in customers | filter:nameText>
<script>
function FilteringController($scope) {
$scope.customers = [
{ name: 'Dave Jones', city: 'Phoenix' },
{ name: 'Jamie Riley', city: 'Phoenix' },
{ name: 'Heedy Wahlin', city: 'Chandler' },
{ name: 'Thomas Winter', city: 'Seattle' }
];
</script>
>在本例中nameText
是一个具有属性name
和city
的对象。这些属性由输入字段填充。您正在使用对象过滤列表。在这种情况下,Angular 所做的是使用具有匹配名称的属性过滤列表中的对象。因此,例如,如果nameText.city
是Phoenix
,则会筛选列表中的项,以便仅保留具有city
属性Phoenix
项。这适用于name
,两者可以组合使用。
更新以回答评论中的问题:对于确切的实现,我建议查看 Angular 源代码。此处是使用对象的过滤器的特定情况。这大致的作用是获取作为过滤器传入的对象的所有属性(在您的情况下nameText
)。然后,它会浏览对象列表,以筛选并选择具有与要搜索的属性匹配的属性的所有对象。在我引用的源代码中,您还可以看到如何处理您可能传递的其他类型的搜索过滤器。