angularjs, как отфильтровать true для целых чисел с помощью нескольких других фильтров?

Я надеюсь, что название этого вопроса никого не смущает, но мне нужно выяснить что-то, что кажется очень простым, но я не могу понять это...

В основном у меня есть несколько фильтров, и два из них фильтруют числа. Но если одно число равно «1» (Калифорния в примере на jsFiddle), а другое — «13» (Аризона), фильтрация будет включать оба, если я выберу «1».

Вот мой 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>

КОД ЯВАСКРИПТА:

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/

Я знаю, что мне нужно добавить «true» к фильтру, но я не уверен, где и как.


person webmaster_sean    schedule 04.04.2015    source источник


Ответы (1)


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>

Обновленная скрипта. Теперь, когда вы выбираете Калифорнию, вы получаете только округа в Калифорнии.

person David says Reinstate Monica    schedule 04.04.2015
comment
Привет @ david-grinberg, я пытаюсь отфильтровать список по stateID. Тестируя его, я могу выбрать Калифорнию, Аризону и Юту, которые по-прежнему отображаются в результатах, и это проблема, которую я пытаюсь решить. Я хочу, чтобы при выборе отображалась только Калифорния. - person webmaster_sean; 04.04.2015