2015-01-21 3 views
0

В приложении моей приборной панели я использую эластичный поиск для извлечения данных, который извлекает данные в порядке. Теперь мне нужно перебирать данные и получать результат в нужном порядке.Как я могу перебирать результаты поиска с помощью углового?

Вот мой код,

routerApp.controller('SearchCtrl', function($scope, ejsResource) { 

     var ejs = ejsResource('http://192.168.1.200:9200'); 

     var oQuery = ejs.QueryStringQuery().defaultField('Agent'); 

     var client = ejs.Request() 
      .indices('nondomain_callrelatedinfo') 
      .types('callrelatedinfos'); 

     $scope.search = function() { 
      $scope.results = client 
       .query(oQuery.query($scope.queryTerm || '*')) 
       .doSearch(); 
      console.log($scope.results); 

     }; 

    }); 

Я добавил console.log в результатах, и это reuturns что-то вроде этого, данных:

enter image description here

когда я итерацию над хитами, он говорит, что не может прочитать свойство «хитов» undefined

$scope.dataRetrieved= $scope.results.value.hits; 
      for (var i = 0; i < $scope.dataRetrieved.length; i++) { 
       console.log($scope.dataRetrieved[i]); 
      }; 
      }; 
+0

Прочтите: https://docs.angularjs.org/api/ng/function/angular.forEach – sandipon

+0

Существует так много способов перебора данных. например, foreach, _.each и т. д. – Ved

+0

@Ved ya Я знаю это, но как я могу добраться до того, что попадает в объект внутри массива? – Sajeetharan

ответ

2

Вы должны использовать объект Promise, что doSearch() возвращается:

client 
    .query(oQuery.query($scope.queryTerm || '*')) 
    .doSearch().then(function (resp) { 
     var hits = resp.hits.hits; 
     // do whatever 
    }, function (err) { 
     console.trace(err.message); 
    }); 

Зная угловым, если вы хотите, чтобы связать результат $scope.result может быть $timeout(function() {}) также может помочь.

2

https://docs.angularjs.org/api/ng/function/angular.forEach

просто гнездо ваш Foreach:

angular.forEach(results, function(result, key) { 
    angular.forEach(result, function(value, key) { 
     this.push(key + ': ' + value); 
    }, log); 
}, log); 
+0

Вы могли бы предоставить точный способ получить результат? я получаю ошибку undefined не является функцией – Sajeetharan

0

$ scope.results. hits.hits;

$scope.dataRetrieved= $scope.results.hits.hits; 
     for (var i = 0; i < $scope.dataRetrieved.length; i++) { 
      console.log($scope.dataRetrieved[i]); 
     }; 
     }; 

первые образы - это объект, второй - ваш массив. вот почему первые хиты не имеют свойства длины

+0

TypeError: Невозможно прочитать свойства «хитов» неопределенных – Sajeetharan

+0

hits.hits - фактический массив результатов поиска см. api – micha

+0

Я не понимаю, мне нужно что-то менять – Sajeetharan

Смежные вопросы