Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:自定义过滤器和ng重复_Angularjs_Ng Repeat_Angular Filters - Fatal编程技术网

AngularJS:自定义过滤器和ng重复

AngularJS:自定义过滤器和ng重复,angularjs,ng-repeat,angular-filters,Angularjs,Ng Repeat,Angular Filters,我是一名AngularJS新手,我正在构建一个小型概念验证汽车租赁清单应用程序,该应用程序引入一些JSON,并通过ng repeat(ng repeat)呈现出各种数据位,带有几个过滤器: <article data-ng-repeat="result in results | filter:search" class="result"> <header><h3>{{result.carType.name}}, {{result.carD

我是一名AngularJS新手,我正在构建一个小型概念验证汽车租赁清单应用程序,该应用程序引入一些JSON,并通过ng repeat(ng repeat)呈现出各种数据位,带有几个过滤器:

   <article data-ng-repeat="result in results | filter:search" class="result">
        <header><h3>{{result.carType.name}}, {{result.carDetails.doors}} door, &pound;{{result.price.value}} - {{ result.company.name }}</h3></header>
            <ul class="result-features">
                <li>{{result.carDetails.hireDuration}} day hire</li>
                <li data-ng-show="result.carDetails.airCon">Air conditioning</li>
                <li data-ng-show="result.carDetails.unlimitedMileage">Unlimited Mileage</li>
                <li data-ng-show="result.carDetails.theftProtection">Theft Protection</li>
            </ul>
    </article>

    <h2>Filters</h2>

    <h4>Doors:</h4> 
    <select data-ng-model="search.carDetails">
        <option value="">All</option>
        <option value="2">2</option>
        <option value="4">4</option>
        <option value="9">9</option>
    </select>

    <h4>Provider:</h4>
    Atlas Choice <input type="checkbox"  data-ng-model="search.company" ng-true-value="Atlas Choice" ng-false-value="" value="Atlas Choice" /><br>
    Holiday Autos <input type="checkbox"  data-ng-model="search.company" ng-true-value="Holiday Autos" ng-false-value="" value="Holiday Autos" /><br>
    Avis <input type="checkbox"  data-ng-model="search.company" ng-true-value="Avis" ng-false-value="" value="Avis" /><br>      

解决此问题的最简单方法之一是使用
$
,这是“全部搜索”

这是一个plunker,它显示了它的工作原理。我已将复选框更改为radio(因为我认为它们应该是互补的)

如果您想要一种非常具体的方法来实现这一点(而不是进行一般搜索),则需要在搜索中使用函数

文件在这里


如果要运行某些自定义筛选逻辑,可以创建一个函数,该函数将数组元素作为参数,并根据它是否应在搜索结果中返回
true
false
。然后将其传递到
filter
指令,就像处理
search
对象一样,例如:

JS:

$scope.filterFn = function(car)
{
    // Do some tests

    if(car.carDetails.doors > 2)
    {
        return true; // this will be listed in the results
    }

    return false; // otherwise it won't be within the results
};
...
<article data-ng-repeat="result in results | filter:search | filter:filterFn" class="result">
...
HTML:

$scope.filterFn = function(car)
{
    // Do some tests

    if(car.carDetails.doors > 2)
    {
        return true; // this will be listed in the results
    }

    return false; // otherwise it won't be within the results
};
...
<article data-ng-repeat="result in results | filter:search | filter:filterFn" class="result">
...
。。。
...

正如您所见,您可以将多个过滤器链接在一起,因此添加自定义过滤器功能不会强制您使用
搜索
对象删除以前的过滤器(它们将无缝地协同工作)。

如果您仍然需要自定义过滤器,则可以将搜索模型传递到过滤器:

<article data-ng-repeat="result in results | cartypefilter:search" class="result">

您可以在同一个ng repeat筛选器中调用多个函数筛选器

<article data-ng-repeat="result in results | filter:search() | filter:filterFn()" class="result">


非常有趣!过滤器可简化为
返回车.carDetails.doors>2虽然。当然可以。不过,我决定使用更详细的版本,以使其作为学习示例更清晰。如果您需要更复杂的过滤器,也可以。@mirrimx我不知道何时调用此函数?我喜欢
return(car.carDetails.doors>2)是否可以为自定义筛选器提供多个参数?可能为或筛选器而不是和?嗯。。。我认为最好的选择是一个函数来实现这一点,下面是一个例子(不适用)besttry这个自定义过滤器教程