angularjs如何使用多个其他过滤器对整数进行过滤?

问题描述:

我希望这个问题的标题不会让任何人感到困惑 - 但我需要找出一些看起来很基本的东西,但我似乎无法“明白”...angularjs如何使用多个其他过滤器对整数进行过滤?

基本上我有多个过滤器,其中两个过滤数字。但是,如果我选择“1”,如果一个数字是“1”(加利福尼亚在jsFiddle的例子中),另一个是“13”(亚利桑那州),则过滤将包括两者。

这里是我的HTML:

<div ng-app='app' ng-controller='myController'> 
<h3>Records: {{(projects|filter:filter).length}} of {{projects.length}}</h3> 
<p><input type="text" name="generalSearch" placeholder="Search Project Title" ng-model="filter.name"></p> 
<p><select ng-model="filter.stateID" 
     ng-options="item.stateID as item.state for item in st_option">  </select> 
    <select ng-model="filter.countyID" 
     ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }"> 
    </select></p> 

    <p><a href="" id="clear-filter" ng-click="clearFilter()">Reset Filters</a></p> 

    <div ng-repeat="project in projects | filter:filter"> 
    <div> 
    <br>Name: {{ project.name }} 
    <br>State: {{project.state}} 
    <br>County: {{project.county}} 
    <br> 
    <span ng-hide="{{project.stateID}} "></span> 
    <span ng-hide="{{project.countyID}} "></span> 
</div> 

JavaScript代码:

var app = angular.module('app', []); 

app.controller('myController', function($scope) { 
    $scope.projects = [{ 
    name: 'First thing', 
    state: 'CA', 
    stateID: '1', 
    county: 'Orange', 
    countyID: '191' 
    }, { 
    name: 'Another Thing', 
    state: 'CA', 
    stateID: '1', 
    county: 'LosAngeles', 
    countyID: '190' 
    }, { 
    name: 'In California', 
    state: 'CA', 
    stateID: '1', 
    county: 'Orange', 
    countyID: '191' 
    }, { 
    name: 'Hey Arizona!', 
    state: 'Arizona', 
    stateID: '13', 
    county: 'Multiple Counties', 
    countyID: '3178' 
    },{ 
    name: 'hello Utah', 
    state: 'Utah', 
    stateID: '14', 
    county: 'Utah County', 
    countyID: '200' 
    }]; 

    $scope.st_option = [{ 
    state: "California", 
    stateID: "1" 
    }, { 
    state: "Arizona", 
    stateID: "13" 
    },{ 
    state: "Utah", 
    stateID: "14" 
    }]; 

    $scope.co_option = [{ 
    county: "Orange", 
    countyID: "191", 
    co_state_id: "1" 
    }, { 
    county: "Multiple Counties", 
    countyID: "3178", 
    co_state_id: "13" 
    }, { 
    county: "Sonoma", 
    countyID: "218", 
    co_state_id: "1" 
    }, { 
    county: "Los Angeles", 
    countyID: "190", 
    co_state_id: "1" 
    }, { 
    county: "Utah County", 
    countyID: "200", 
    co_state_id: "14" 
    }]; 

    $scope.filter = {}; 
$scope.clearFilter = function() { 
    $scope.filter = {}; 
    }; 
}); 

我创建了一个的jsfiddle这里:

https://jsfiddle.net/webmastersean/4m2d5n8u/

我知道我需要添加“真实”的过滤器,但我不知道在哪里或如何。

filter具有第三参数,比较器功能。作为语法糖,这第三个参数也可以取值true来表示严格的比较。这意味着,所有你需要做的就是添加:true到贵县过滤器的结尾:

<select ng-model="filter.countyID" 
     ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }:true"> 
</select> 

Updated fiddle。现在,当你选择加州时,你只能在加利福尼亚州获得县。

+0

嗨@ david-grinberg,我试图通过stateID筛选列表。测试它我可以选择加利福尼亚州和亚利桑那州和犹他州仍然显示的结果,这是我想解决的问题。我只希望加利福尼亚在我选择时显示。 – 2015-04-04 17:16:56