在我的仪表板应用程序中,我使用弹性搜索来检索数据,这可以很好地检索数据。现在我需要迭代数据并以所需的方式获得结果。
这是我的代码,
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,它重新启动了这样的事情, 数据:
当我重复点击时,它表示无法读取" hits"未定义
$scope.dataRetrieved= $scope.results.value.hits;
for (var i = 0; i < $scope.dataRetrieved.length; i++) {
console.log($scope.dataRetrieved[i]);
};
};
答案 0 :(得分: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);
答案 1 :(得分:2)
您应该使用doSearch()
返回的Promise对象:
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 :(得分: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]);
};
};
第一个匹配是一个对象,第二个是你的数组。这就是为什么第一次点击没有属性长度