J'espère résoudre trois problèmes ...
Dans ma page d'application, j'ai une sélection pour les États et une autre pour les comtés. Pour les États que j'ai:
<select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option">
</select>
Données:
[
{ state="California", stateID="5"},
{ state="Arizona", stateID="3"},
{ state="Oregon", stateID="38"},
{ state="Texas", stateID="44"},
{ state="Utah", stateID="45"},
{ state="Nevada", stateID="29"}
]
Pour mon comté, sélectionnez J'ai:
<select ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
</select>
Données:
[
{ county="Orange", countyID="191", co_state_id="5"},
{ county="Multiple Counties", countyID="3178", co_state_id="3"},
{ county="Sonoma", countyID="218", co_state_id="38"},
{ county="Los Angeles", countyID="190", co_state_id="44"}
]
C'est mon ng-repeat
:
<div ng-repeat="project in projects | filter:filter">
<div>
State: {{project.state}}<br>
County: {{project.county}}<br>
<span ng-hide="{{project.stateID}}"></span>
<span ng-hide="{{project.countyID}}"></span>
</div>
</div>
Donc, comme vous pouvez le voir, j'utilise le stateID
sur le State Select et sur le County Select, j'ai l'ID d'état correspondant défini dans co_state_id
dans l'ensemble de données du comté.
J'aimerais faire quelques choses:
stateID
/co_state_id
ng-repeat
d'abord par le stateID
, puis par le countyID
.Je ne vois pas non plus de moyen de définir filter.stateID
à true
ou filtrez par un nombre au lieu d'une chaîne. lorsque je filtre par stateID, j'obtiens des résultats mitigés car certains stateID
peuvent contenir "1".
Habituellement, vous ne voulez poser qu'une seule question par message, mais je vais essayer ces trois-là.
Partie 1: Ajoutez un ng-show
pour filter.stateID
. Comme vous ne pouvez pas désélectionner un état, vous pouvez utiliser une liaison unique si votre angular est ^ 1.3.
<select ng-show="::filter.stateID" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
Partie 2: Ajouter un filtre pour {co_state_id : filter.stateID}
<select ng-show="::filter.stateID != null" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">
Partie:
Vous utilisez l'objet modèle pour le filtre, peu importe si la valeur de l'id est 1:
Objet: un objet de motif peut être utilisé pour filtrer des propriétés spécifiques sur des objets contenus dans un tableau. Par exemple, {nom: "M", prédicat phone: "1"} renverra un tableau d'éléments dont le nom de propriété contient "M" et le téléphone de propriété contient "1". Un nom de propriété spécial $ peut être utilisé (comme dans {$: "text"}) pour accepter une correspondance avec n'importe quelle propriété de l'objet ou ses propriétés d'objet imbriquées. Cela équivaut à la simple correspondance de sous-chaîne avec une chaîne, comme décrit ci-dessus. Le prédicat peut être annulé en préfixant la chaîne avec!. Par exemple, le prédicat {name: "! M"} renverra un tableau d'éléments dont le nom de propriété ne contient pas "M".
Extrait de travail
var app = angular.module('app', []);
app.controller('myController', function($scope) {
$scope.projects = [{
name: 'Project1',
state: 'CA',
stateID: '5',
county: 'Orange',
countyID: '191'
}, {
name: 'Project2',
state: 'CA',
stateID: '5',
county: 'LosAngeles',
countyID: '190'
}, {
name: 'Project3',
state: 'CA',
stateID: '5',
county: 'Orange',
countyID: '191'
}, {
name: 'Project4',
state: 'MadeUp',
stateID: '1',
county: 'MadeUp',
countyID: '190'
}];
$scope.st_option = [{
state: "California",
stateID: "5"
}, {
state: "Arizona",
stateID: "3"
}, {
state: "Oregon",
stateID: "38"
}, {
state: "Texas",
stateID: "44"
}, {
state: "Utah",
stateID: "45"
}, {
state: "Nevada",
stateID: "29"
}];
$scope.co_option = [{
county: "Orange",
countyID: "191",
co_state_id: "5"
}, {
county: "Multiple Counties",
countyID: "3178",
co_state_id: "3"
}, {
county: "Sonoma",
countyID: "218",
co_state_id: "38"
}, {
county: "Los Angeles",
countyID: "190",
co_state_id: "44"
}];
$scope.filter = {};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<div ng-app='app' ng-controller='myController'>
<select ng-model="filter.stateID"
ng-options="item.stateID as item.state for item in st_option"></select>
<select ng-show="::filter.stateID"
ng-model="filter.countyID"
ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">
</select>
<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>
</div>
</div>