如何使用AngularJS过滤器将表搜索结果默认为隐藏?
在下面的Angularjs代码段中,默认情况下会显示整个表,并在开始键入时进行筛选如何使用AngularJS过滤器将表搜索结果默认为隐藏?,angularjs,Angularjs,在下面的Angularjs代码段中,默认情况下会显示整个表,并在开始键入时进行筛选 将其更改为默认情况下不显示结果,并且仅在(比如)至少3个结果与搜索查询匹配后才开始显示结果的最佳做法是什么 还有一个问题,如果输入了至少2个字符,您将如何仅显示结果 Html: <div ng-app="myApp"> <div ng-controller="PeopleCtrl"> <input type="text" ng-model="search.$"
<div ng-app="myApp">
<div ng-controller="PeopleCtrl">
<input type="text" ng-model="search.$">
<table>
<tr ng-repeat="person in population.sample | filter:search">
<td>{{person.name}}</td>
<td>{{person.job}}</td>
</tr>
</table>
</div>
</div>
var myApp = angular.module('myApp', []);
myApp.factory('Population', function () {
var Population = {};
Population.sample = [
{
name: "Bob",
job: "Truck driver"
}
// etc.
];
return Population;
});
function PeopleCtrl($scope, Population) {
$scope.people = Population;
}
实际上,您可以在标记中完成所有这些 以下是您的标记中的更改:
<input type="text" ng-model="search">
<table ng-show="(filteredData = (population.sample | filter:search)) && filteredData.length >= 3 && search && search.length >= 2">
<tr ng-repeat="person in filteredData">
<td>{{person.name}}</td>
<td>{{person.job}}</td>
</tr>
</table>
{{person.name}
{{person.job}
编辑:更改我的答案以反映您的要求。不完全如此。因此,问题是默认情况下没有结果,这是通过将
ng show
设置为filteredData=(filter:search)
来实现的,但是没有结果出现。编辑我的答案后,现在应该只在搜索字符串长度超过两个字符且有3个或更多结果时显示答案。这样更好。我想接受这个答案,但在我接受之前,我想问。。。向ng show添加这么多逻辑是否可以接受(上下文:我使用Rails,不支持视图逻辑),在其他地方不是更好吗?这确实是缓存过滤结果的最干净的方法。或者在控制器中,您需要注入$filter
,然后创建过滤器实例,然后使用它们,然后将结果放入$scope
变量中。所以,是的,这通常是可以接受的。但是,如果您发现由于某种原因很难维护,那么将其移动到您的控制器。