ich diese JSON-Daten haben, die für eine Autocomplete-Abfrage mit EUs match_phrase_prefix Abfrage eine Rückkehr von Elasticsearch Suchergebnissen:AngularJS forEach Iteration
"hits": {
"total": 3,
"max_score": 3.3071127,
"hits": [
{
"_source": {
"ymme": "bourne supremacy"
}
},
{
"_source": {
"ymme": "bourne ultimatum"
}
},
{
"_source": {
"ymme": "bourne idendity"
}
}
Also, was ich versuche durch, dies zu tun ist, durchlaufen zu bekommen der Wert von "ymme".
Meine aktuelle Funktion in meinem Controller für die Autocomplete-Vorschläge ist wie folgt:
//suggestions
$scope.getSuggestions = function(query) {
$scope.isSearching = true;
return searchService.getSuggestions(query).then(function(es_return){
var phrases = es_return.hits.hits;
console.log(phrases);
if (phrases) {
return $scope.autocomplete.suggestions = phrases;
console.log(suggestions)
}
else {
$scope.autocomplete.suggestions = [];
$scope.noResults = true;
}
$scope.isSearching = false;
},
function(error) {
console.log('ERROR: ', error.message);
$scope.isSearching = false;
});
};
Was hier passiert, ist, dass die Vorschläge in der Dropdown-Liste angezeigt, aber der Wert von „ymme“ (der eigentliche Vorschlag) ist nicht an $ scope.autocomplete.suggestions übergeben.
Ich muss die Ergebnisse durchlaufen und den Wert von "ymme" auf $ scope.autocomplete.sugggestrings schieben, ich habe mir angular.forEach angesehen, aber ich bin mir nicht sicher, wie ich es umsetzen soll, da ich damit zu tun habe ein Schlüssel, Wert-Paar, das in einem Objekt, das in einem Objekt, das ein Array ist, die noch in einem anderen Objekt sind:
"hits": {
"hits": [
{
"_source": {
"ymme": "bourne supremacy"
}
}
]
}
Irgendwelche Ideen, Anregungen?
UPDATE
//suggestions
$scope.getSuggestions = function(query) {
$scope.isSearching = true;
return searchService.getSuggestions(query).then(function(es_return) {
var phrases = es_return.hits.hits;
if (phrases) {
return $scope.autocomplete.suggestions = phrases.map(function(item) {
return item._source.ymme;
})
} else {
$scope.autocomplete.suggestions = [];
$scope.noResults = true;
}
$scope.isSearching = false;
}, function(error) {
console.log('ERROR: ', error.message);
$scope.isSearching = false;
});
};
HTML dropwdown
<input type="text" ng-model="searchTerms" class="form-control input-md" placeholder="{{ searchTerms }}" name="q" id="srch-term" uib-typeahead="query as query._source.ymme for query in getSuggestions($viewValue)" typeahead-on-select="search($item)">
Dank für die schnelle Antwort, ich dies als forEach besser gefallen, aber wie würde ich $ scope.getSuggestions oben implementieren in? Muss ich die if else Statements loswerden oder ....? – user3125823
Ersetzen Sie einfach 'return $ scope.autocomplete.suggestions = phrases;' durch den Code in der Antwort und entfernen Sie 'console.log (Vorschläge)' es ist unerreicht. Bitte schön. –
genial! Ich muss das etwas später umsetzen, ich werde es akzeptieren, sobald es funktioniert! Vielen Dank – user3125823