2015-06-02 18 views
5

risposta da FissioCome ottenere l'Indice oggetto in base al valore?

Sto cercando di fare una funzione di ricerca semplice angolare. Quando l'utente digita qualcosa nel campo di input, voglio cercare tra tutti i "titoli" nel mio JSON, e se una parola corrisponde all'ingresso, allora voglio riportare tutti gli oggetti relativi alla partita.

FABBRICA

ho creato una fabbrica per recuperare dati da JSON utilizzando una promessa.

.factory('podcastData', function($http) { 

var podcastData = { 

    async: function() { 
     var promise = $http.get('http://radio-sante-animale.fr/podcast-data.php').then(function(response) { 
      return response.data.categories; 
     }) 
     return promise; 
    } 

}; 

return podcastData; 

}) 

Quindi nel mio controller, ho provato a fare un programma di ricerca nel mio Controller. Quello che ho tentato finora, sono riuscito a fare un ciclo for, ho ottenuto la lunghezza dell'array, poi ho ottenuto tutti i 'podcast' nell'array, e sono poi riuscito a far corrispondere tutti i valori con l'input.

CONTROLLER

Aggiornato

$scope.findValue = function(enteredValue) { 
    console.log(enteredValue); 
    var filtered = []; 
    podcastData.async().then(function(data) { 
     for (i = 0; i < data.length; i++) { 
      angular.forEach(data[i].podcasts, function(podcasts, key) { 

       var foundPodcasts = _.filter(podcasts, function(podcast) {      
        return podcasts.title.toLowerCase().indexOf(enteredValue) >= 0 
       }); 

       if (typeof foundPodcasts !== 'undefined') { 
        filtered.concat(foundPodcasts); 
        console.log(foundPodcasts); 
       };     
      }); 
     } 
    }); 

} 

ho aggiornato il mio controller, ora faccio entrare in restituire tutti gli oggetti che corrisponda all'ingresso di ricerca, tuttavia quando ho console.log foundPodcasts questa è la mia risposta Questo è buono! Tuttavia, ci sono matrici vuote in mezzo, e io non sono in grado di fare un NG-REPEAT, dato che non ci sono VALUE che posso afferrare.

enter image description here

+1

Puoi mostrarci il json dei "dati". Quali proprietà contiene? –

+0

Ciao Anon, certo! http://radio-sante-animale.fr/podcast-data.php – anon

risposta

2

preso la libertà di cambiare filtered in matrice; Ho capito che volevi trovare TUTTI i film corrispondenti, mentre nel tuo codice stavi ricreando l'oggetto filtered in ogni partita.

$scope.findValue = function(enteredValue) { 
    var filtered = []; 
    podcastData.async().then(function(data) { 
     for (i = 0; i < data.length; i++) { 
      var foundPodcasts = _.filter(data[i].podcasts, function(podcast) { 
       return podcast.title.toLowerCase().indexOf(enteredValue) >= 0 
      }); 
      if (typeof foundPodcasts !== 'undefined') { 
       filtered = filtered.concat(foundPodcasts); 
      }; 
     } 
    console.log(filtered); 
    return filtered; 
}); 
+0

Grazie per l'aiuto, tuttavia nel tuo ritorno 'podcast.title.toLowerCase() ...', podcast.title non viene trovato, cercando di capire fuori come posso prendere il valore del titolo – anon

+0

@anon, questo è il mio male - ho notato anche un altro errore. Prova quello che ho modificato ora. L'ho eseguito da solo e ha funzionato bene. – Fissio

+0

Questo ha fatto! :) Grazie – anon

Problemi correlati