2017-10-23 1 views
1

Ich habe bereits zahlreiche Fragen hier gelesen, aber etwas klickt einfach nicht mit mir und verstehe dieses Problem, das ich habe.

der js Code:

app.controller('example_ctrl',['$scope','$http', function($scope, 
    $http){ 
    $http.get('api_call_here').then(function successCallBack(response){ 
    $scope.response = response; 
    }); 

Json-Format von api:

{ 
     "categoryOne": { 
     "1": { 
      "title": "someData1", 
      "description": "This is number One" 
     }, 
     "2": { 
      "title": "moreData1", 
      "description": "I am not a number, I'm a free man!" 
     } 
     } 
    } 

Jetzt, da diese hasnt in einem Array zurückgegeben worden, ich erhalte eine Fehlermeldung, wenn ich versuche, es zu filtern. Als Beispiel:

<div ng-repeat="(category, object) in response.data"> 
     <div ng-repeat="item in object"> 
     <p>{{item.title}}</p> 
     </div> 
    </div> 

Nun, wenn ich versuche, ein ng-Modell auf einer Sucheingabe zu setzen, und das mit einem in die ng-repeat binden | Filter: ng-Modellnamen, bekomme ich einen Fehler.

Was ich grundsätzlich tun möchte, ist, wenn Sie Text in das Suchfeld eingeben, haben Sie nur den Titel/Beschreibungen, die diesen Text enthalten.

+0

haben Sie die Ausgabe-Header von Ihrem api auf application/json wird geprüft? es würde nicht wirklich json zurückgeben, wenn es nur eine Zeichenkette ist – mtizziani

+0

Es gibt ein Objekt zurück, wenn ich console.log erhalte. –

+0

Sie müssen die Elemente zu Arrays zuordnen, da Filter auf Objekt – charlietfl

Antwort

0

Sie können die Liste des Objekts in jeder Kategorie Array umwandeln:

app.controller('example_ctrl',['$scope','$http', function($scope, $http){ 
 
    $http.get('api_call_here').then(function(response) {  
 
     Object.keys(response.data).forEach(function(category) { 
 
     response.data[category] = Object.values(response.data[category]); // Transfom list of objects in each category to array 
 
    }); 
 
    console.log("transformed: ", response); 
 
    $scope.response = response; \t 
 
});

+0

nicht funktioniert Das funktionierte wunderbar, danke. –

+0

Beachten Sie, dass Sie auch die Filterung im Controller anstelle des zusätzlichen Overhead in der Ansicht durchführen können – charlietfl