Ich habe eine AngularJS 1.4.7 typeahead:AngularJS typeahead geben [Filter: notarray] Fehler auf Ajax GET-Abfrage
<input type="text"
class="form-control simpleinput"
placeholder="keyword"
name="searchbarFormInput"
id="searchbarFormInput"
ng-model="selected"
ng-click="selected=null"
ng-enter="doBlur($event)"
uib-typeahead="record.display_name for record in getRecords($viewValue) | filter:{ display_name : $viewValue }"
typeahead-template-url="searchbar-result-template.html"
typeahead-on-select="selectRecord($item)"
typeahead-focus-on-select="false"
typeahead-editable="false"
autocomplete="off" />
dieses typeahead des Controllers ruft getRecords(needle)
und Filter auf der mitgelieferten needle
Wert ($viewValue
, oder was auch immer Wert in der input
Ansicht ist):
$scope.getRecords = function(needle) {
return $scope.testRecords;
}
Hier ist $scope.testRecords
ein Array von Testobjekten, wie zB:
$scope.testRecords = [ { "display_name" : "foo" } , { "display_name" : "bar" } ... ];
Dies funktioniert ordnungsgemäß. Die Typehead wird ein Pulldown-Menü darstellen. Das Menü wird basierend auf dem gefiltert, was ich in das Feld input
eintippe.
Jetzt möchte ich dieses Array von Datensätzen aus einer GET-Abfrage Quelle:
$scope.getRecords = function(needle) {
return $http.get('/search/by', {
params: {
'requestType' : 'searchByDisplayName',
'pageSize' : 1000
}
}).then(function(res) {
console.log(res.data.results);
return res.data.results;
});
}
Dies ist eine GET-Anforderung an einer Strecke, die, wenn sie direkt aufgerufen arbeitet (bestätigt durch, beispielsweise curl
oder wget
).
Wenn ich auf die Browser-Konsole gucke, zeigt console.log(res.data.results)
das richtige Array von Objekten - genau die gleichen Objekte, die im Array $scope.testObjects
sind.
Allerdings bekomme ich kein Pull-Down-Menü und ich erhalte auch die folgenden [filter:notarray]
Fehler:
Error: [filter:notarray] http://errors.angularjs.org/1.4.7/filter/notarray?p0=%7B%22%24%24state%22%3A%7B%22status%22%3A0%7D%7D
https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:6:421
https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:149:197
fn
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js:11:6694
https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js:11:8633
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:263:425
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:263:284
https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:265:279
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:133:221
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:133:456
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:265:249
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:264:507
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:163:165
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:35:221
Dieser Fehler wiederholt für so viele Briefe wie ich in das input
Feld eingeben.
Was mache ich falsch mit dem Request-, Typeahead- oder Typeahead-Filter, und wie kann ich das beheben?
Überprüfen Sie, ob die Objektrückgabe vom Typ "Array" ist oder nicht, ich denke, Sie sollten auch in [dieses GitHub-Problem] (https://github.com/mgcrea/angular-strap/issues/1710) schauen –
Wenn ich Folgendes aufzeichne: 'console.log (res.data.results instanceof Array);' Ich bekomme 'wahr' zurück bei jedem Tastendruck. –
Hast du den github issue-Link durchgelesen, den ich gegeben habe. –