0

I hope the title of this question is not confusing to anyone - but I need to figure out something that seems very basic but I can't seem to "get it"...

Basically I have multiple filters, and two of them filter on numbers. But, if one number is say "1" (California in the example on jsFiddle) and another is "13" (Arizona) filtering will include both if I select "1".

Here's my 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 CODE:

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 = {}; }; }); 

I've created a jsFiddle here:

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

I know I need to add "true" to the filter but I'm not sure where or how.

1 Answer 1

0

filter has a third parameter, a comparator function. As syntactic sugar, this third parameter can also take the value true to mean strict comparison. That means all you need to do is add :true to the end of your county filter:

<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. Now when you select California you only get counties in California.

Sign up to request clarification or add additional context in comments.

1 Comment

Hi @david-grinberg, I'm trying to filter the list by stateID. Testing it I can select California and Arizona and Utah still show in the results, which is the problem I'm trying to resolve. I want only California to show when I select it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.