如何使用AngularJS过滤器将表搜索结果默认为隐藏?

如何使用AngularJS过滤器将表搜索结果默认为隐藏?,angularjs,Angularjs,在下面的Angularjs代码段中,默认情况下会显示整个表,并在开始键入时进行筛选 将其更改为默认情况下不显示结果,并且仅在(比如)至少3个结果与搜索查询匹配后才开始显示结果的最佳做法是什么 还有一个问题,如果输入了至少2个字符,您将如何仅显示结果 Html: <div ng-app="myApp"> <div ng-controller="PeopleCtrl"> <input type="text" ng-model="search.$"

在下面的Angularjs代码段中,默认情况下会显示整个表,并在开始键入时进行筛选

  • 将其更改为默认情况下不显示结果,并且仅在(比如)至少3个结果与搜索查询匹配后才开始显示结果的最佳做法是什么

  • 还有一个问题,如果输入了至少2个字符,您将如何仅显示结果

  • Html

    <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
    变量中。所以,是的,这通常是可以接受的。但是,如果您发现由于某种原因很难维护,那么将其移动到您的控制器。