9

Spero di risolvere i tre problemi ...filtro NG-opzioni dal selezione NG-opzioni

Nella mia pagina app ho una selezione per gli stati e un altro per le contee. Per gli stati che ho:

<select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option"> 
</select> 

dati:

[ 
    { state="California", stateID="5"}, 
    { state="Arizona", stateID="3"}, 
    { state="Oregon", stateID="38"}, 
    { state="Texas", stateID="44"}, 
    { state="Utah", stateID="45"}, 
    { state="Nevada", stateID="29"} 
] 

Per il mio County selezionare ho:

<select ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option"> 
</select> 

dati:

[ 
    { 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"} 
] 

Questo è il mio 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> 

Quindi, come si può vedere che sto usando il stateID sullo stato di selezione e sulla contea selezionare Ho corrispondente id stato impostato nel co_state_id nel set di dati della contea.

mi piacerebbe fare un paio di cose:

  1. Nascondi contea selezionare fino a selezionare uno stato.
  2. Dopo aver selezionato uno stato, filtrare le opzioni selezionate contea dal selezionato stateID/co_state_id
  3. Filter ng-repeat dapprima il stateID, poi dal countyID.

Inoltre non ho vedere un modo per impostare filter.stateID a true o filtra per un numero invece di una stringa. quando filtro da stateID ottengo risultati misti perché alcuni stateID 's possono avere "1" in loro ..

+0

add violino o plunkr prega –

+0

Hi @pankajparkar, vedere soluton di DTing sotto, c'è un link per eseguire il frammento di codice. Proverò a lavorare su un plunker più tardi, ma su un piano ATM e ho bisogno di andare avanti .. –

risposta

28

Di solito si desidera solo fare una domanda per post, ma darò a questi tre uno scatto.

Parte 1: Aggiungere un ng-show per filter.stateID. Dal momento che non è possibile deselezionare uno stato, è possibile utilizzare un binding una tantum se la propria angolare è^1.3.

<select ng-show="::filter.stateID" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option"> 

Parte 2: Aggiungi filtro per {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 }"> 

Parte 3:

Si utilizza il modello oggetto per il filtro, non dovrebbe importare se il valore di l'ID è 1:

Oggetto: un oggetto modello può essere utilizzato per filtrare proprietà specifiche sugli oggetti contenuti in serie. Ad esempio {name: "M", telefono: il predicato "1"} restituirà un array di elementi che hanno il nome della proprietà contenente "M" e il telefono di proprietà contenente "1".Può essere usato un nome di proprietà speciale $ (come in {$: "testo"}) per accettare una corrispondenza con qualsiasi proprietà dell'oggetto o le sue proprietà dell'oggetto nidificato. È equivalente alla semplice sottostringa con una stringa come descritto sopra. Il predicato può essere negato prefissando la stringa con!. Ad esempio {name: il predicato "! M"} restituirà un array di elementi che hanno il nome della proprietà che non contiene "M".

lavoro Snippet

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>

+0

Grazie DTing, sto ancora testando la tua soluzione prima di controllare come risposta, ma penso che questo mi abbia davvero vicino. Sto ancora diventando strana - come posso selezionare "Alabama" che dovrebbe produrre un risultato, ma sta mostrando 300 risultati da Louisiana, Idaho e Hawaii ... La maggior parte degli altri stati stanno filtrando perfettamente i risultati, solo alcuni non lo sono lavorando così sto ancora cercando di capire se è qualcosa che non ho fatto nel mio controller o nei miei dati. Ho anche convertito i miei ID in numeri invece che in stringhe usando parseInt(). –

+0

@webmaster_sean Non posso davvero aiutarlo, a meno che non pubblichi il tuo codice da qualche parte (o meglio ancora una nuova domanda). In bocca al lupo! – DTing

+0

dopo altri test sto controllando la tua soluzione come risposta perché ha risolto la parte 1 e la parte 2 - la parte 3 è alcune cose su cui sto ancora provando a lavorare .. forse in un'altra domanda quando posso cristallizzare di più quello il problema è Per riferimento futuro proverò a postare domande con solo una parte per loro ;-) –

Problemi correlati