2015-06-02 30 views
5

von Fissio BEANTWORTETWie erhält man den Objektindex nach Wert?

Ich versuche, eine einfache Suchfunktion in Eckige zu machen. Wenn der Benutzer etwas in das Eingabefeld eingibt, möchte ich alle 'Titel' in meinem JSON durchsuchen, und wenn ein Wort mit der Eingabe übereinstimmt, dann möchte ich alle Objekte zurückbringen, die mit der Übereinstimmung zusammenhängen.

FACTORY

Ich habe zunächst eine Fabrikdaten aus JSON abzurufen ein Versprechen verwenden.

.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; 

}) 

Dann in meinem Controller, habe ich versucht, ein Suchprogramm in meinem Controller zu tun. Was ich bisher versuchte, habe ich eine for-Schleife gemacht, ich habe die Länge des Arrays, ich habe dann alle "Podcasts" in das Array, und ich habe es dann geschafft, alle Werte mit dem Eingang abgestimmt.

CONTROLLER

Aktualisiert

$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); 
       };     
      }); 
     } 
    }); 

} 

ich mein Controller aktualisiert, jetzt muss ich alle Objekte erhalten zurückzukehren, die die Suche Eingabe übereinstimmt, aber wenn ich console.log foundPodcasts Das ist meine Antwort. Das ist gut! Es gibt jedoch leere Arrays dazwischen, und ich kann kein NG-REPEAT ausführen, da es keinen Wert gibt, den ich abrufen kann.

enter image description here

+1

Können Sie uns den JSON der "Daten" zeigen. Welche Eigenschaften enthält es? –

+0

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

Antwort

2

war so frei von filtered in Array zu ändern; Ich habe verstanden, dass du ALLE passenden Filme finden wolltest, während du in deinem Code das filtered Objekt bei jedem Spiel neu erstellt hast.

$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

Danke für Ihre Hilfe, aber in Ihrer Rückkehr 'podcast.title.toLowerCase() ...', podcast.title nicht gefunden wird, versuchen zu verstehen heraus, wie ich den Titel Wert – anon

+0

@anon greifen kann, das ist mein schlechtes - bemerkte einen anderen Fehler auch. Versuchen Sie den, den ich jetzt bearbeitet habe. Ich habe es selbst ausgeführt und es hat gut funktioniert. – Fissio

+0

Das hat es geschafft! :) Vielen Dank – anon

Verwandte Themen