如何提取过滤结果?
How can I pluck out filter results?
我希望能够从过滤后的结果列表中提取出 best 值,这是我的测试页:
http://plnkr.co/edit/MCLTKUGpIyuYYjv7DLFM?p=preview
模板
<div ng-controller="repeatController">
<input type="search" ng-model="q" placeholder="filter results..." />
<ul>
<li ng-repeat="friend in friends | filter:q as results">
[{{$index + 1}}] {{friend.names[0]}}
</li>
<li ng-if="results.length == 0">
<strong>No results found...</strong>
</li>
</ul>
</div>
控制器
var app = angular.module('app', []);
app.controller('repeatController', function($scope) {
$scope.friends = [
{names:['David King', 'Davey', 'oodavid', 'Queenie']},
{names:['Paul King', 'Pablo', 'The Iron Paul']},
{names:['Michael P O\'Keefe', 'Miguel Vennie']},
{names:['James Griffiths', 'The Kraken', 'Thee Krakken']},
{names:['Queen Elizabeth', 'The Queen']}
];
});
当我在搜索框中键入 "the" 时,我看到这些人的其中一个名字中有 "the"(这是正确的列表)...
- 保罗金
- 詹姆斯·格里菲斯
- 伊丽莎白女王
...但是,我想从名称数组中提取最佳匹配项,而不是仅使用 first 值,所以它应该像这样呈现:
- 铁保罗
- 海妖
- 女王
有什么指点吗?
根据您的代码,我了解到您希望在显示时仅显示第一个值,但在搜索时您希望显示子集而不是第一个值。可以通过以下修改来实现:
<ul>
<!-- Filter the subset containing search text -->
<span ng-repeat="friend in friends| filter:q as results">
<!-- Filter again in subset to obtain the actual value -->
<li ng-if="(!q && $first) || (q)" ng-repeat="name in friend.names| filter:q as results">
<span>{{name}}</span>
</li>
</span>
<span ng-if="results.length == 0">
<strong>No results found...</strong>
</span>
</ul>
利用条件(!q && $first) || (q)
,当没有搜索文本时显示第一个值,当有搜索文本时显示全部。
我希望能够从过滤后的结果列表中提取出 best 值,这是我的测试页:
http://plnkr.co/edit/MCLTKUGpIyuYYjv7DLFM?p=preview
模板
<div ng-controller="repeatController">
<input type="search" ng-model="q" placeholder="filter results..." />
<ul>
<li ng-repeat="friend in friends | filter:q as results">
[{{$index + 1}}] {{friend.names[0]}}
</li>
<li ng-if="results.length == 0">
<strong>No results found...</strong>
</li>
</ul>
</div>
控制器
var app = angular.module('app', []);
app.controller('repeatController', function($scope) {
$scope.friends = [
{names:['David King', 'Davey', 'oodavid', 'Queenie']},
{names:['Paul King', 'Pablo', 'The Iron Paul']},
{names:['Michael P O\'Keefe', 'Miguel Vennie']},
{names:['James Griffiths', 'The Kraken', 'Thee Krakken']},
{names:['Queen Elizabeth', 'The Queen']}
];
});
当我在搜索框中键入 "the" 时,我看到这些人的其中一个名字中有 "the"(这是正确的列表)...
- 保罗金
- 詹姆斯·格里菲斯
- 伊丽莎白女王
...但是,我想从名称数组中提取最佳匹配项,而不是仅使用 first 值,所以它应该像这样呈现:
- 铁保罗
- 海妖
- 女王
有什么指点吗?
根据您的代码,我了解到您希望在显示时仅显示第一个值,但在搜索时您希望显示子集而不是第一个值。可以通过以下修改来实现:
<ul>
<!-- Filter the subset containing search text -->
<span ng-repeat="friend in friends| filter:q as results">
<!-- Filter again in subset to obtain the actual value -->
<li ng-if="(!q && $first) || (q)" ng-repeat="name in friend.names| filter:q as results">
<span>{{name}}</span>
</li>
</span>
<span ng-if="results.length == 0">
<strong>No results found...</strong>
</span>
</ul>
利用条件(!q && $first) || (q)
,当没有搜索文本时显示第一个值,当有搜索文本时显示全部。