typeahead angulaire de l'interface utilisateur, impossible de lire la propriété de la longueur de undefined
Je suis en utilisant Angular-ui Bootstrap pour mon application.
J'utilise le typeahead directive.
html:
<input type="text" class="pass_code_input" ng-model="SuppPrefix" Typeahead="ddl_item.Text for ddl_item in getData($viewValue)"/>
Contrôleur
function AutoCompleteCtrl($scope,$http, AutoCompleteSrv) {
$scope.getData = function (prefix) {
AutoCompleteSrv.GetAutoComplete("Supplier", prefix).then(function (result) {
var results_arr = [];
angular.forEach(result.data, function (item) {
results_arr.push({ "Val": item.Val, "Text": item.Text });
});
return results_arr
});
};
};
service:
function AutoCompleteSrv($http) {
var _$http = $http;
self = this;
self.GetAutoComplete = function (DataType, Prefix) {
var promise = _$http({
method: "GET",
url: 'api/AutoComplete',
params: { 'DataType': DataType, 'Prefix': Prefix }
}).success(function (data, status, headers, config) {
}).error(function (data, status, headers, config) {
});
return promise;
};
};
Je dois recevoir les données à partir du serveur, mais je ne peut pas l'afficher sur l'écran. Quand je lance le debugger dans chrome dev tools, j'ai l'erreur suivante:
TypeError: Cannot read property 'length' of undefined
at http://localhost:52145/js/libs/ui-bootstrap-tpls-0.11.0.min.js:13:12650
at m.promise.then.u (http://localhost:52145/js/angular/angular.min.js:97:280)
at m.promise.then.u (http://localhost:52145/js/angular/angular.min.js:97:280)
at http://localhost:52145/js/angular/angular.min.js:98:417
at h.$eval (http://localhost:52145/js/angular/angular.min.js:108:482)
at h.$digest (http://localhost:52145/js/angular/angular.min.js:106:62)
at h.$apply (http://localhost:52145/js/angular/angular.min.js:109:287)
at HTMLInputElement.l (http://localhost:52145/js/angular/angular.min.js:133:191)
at http://localhost:52145/js/angular/angular.min.js:31:32
at q (http://localhost:52145/js/angular/angular.min.js:7:386)
J'ai cherché la solution dans plusieurs endroits, comme que, et également de suivre étape par étape les instructions dans le fichier d'initialisation de l'interface utilisateur page d'accueil.
Qu'ai-je fait de mal?
Vous n'êtes pas les données de retour dans le succès de la méthode, mais s'attendent dans votre contrôleur
J'ai essayé bu, il n'a pas aidé. Aussi, quand je debug, je vois les données dans le contrôleur (il est livré avec la promesse). Les données même retourné de contrôleur, mais puis-je obtenir cette erreur.
Pouvez vous s'il vous plaît configurer un plunker, vous donnera la résolution rapide
J'ai essayé bu, il n'a pas aidé. Aussi, quand je debug, je vois les données dans le contrôleur (il est livré avec la promesse). Les données même retourné de contrôleur, mais puis-je obtenir cette erreur.
Pouvez vous s'il vous plaît configurer un plunker, vous donnera la résolution rapide
OriginalL'auteur Lichte | 2014-07-06
Vous devez vous connecter pour publier un commentaire.
Je viens de tomber sur cette et vient d'être résolu. La clé ici est que, dans l'exemple donné sur l'angle de site de "retourner" le $http résultats. Qui rend confus à regarder, mais en fin de compte c'est le rendement qui compte. Donc dans votre cas vous êtes à la définition d'une variable pour que la valeur de retour de sorte que le retour n'est jamais retourné. Lorsque votre code est formaté de cette manière, vous aurez besoin de faire 2 choses à modifier:
La première est que le "return" est au mauvais endroit. La deuxième est que la déclaration de la valeur retournée est aussi dans le mauvais endroit. Voici le code non-travaillant à partir de l'exemple:
Voici comment je l'ai changé pour le faire fonctionner.
Ceci devient plus clair si vous n'utilisez pas le "alors" mais au lieu d'utiliser le "succès" et "erreur" des fonctions. Il devient alors évident lorsque l'instruction de retour devrait se situer et où la valeur de retour de la déclaration devrait être. Écrire le code de cette façon, et à la faire fonctionner est de savoir comment j'ai compris le problème.
NOTEZ que vous devez effacer le addressses valeur dans le "puis" la fonction ou bien il va juste continuer en ajoutant de plus en plus et les valeurs.
Qui m'a sauvé. Merci.
M'a sauvé! bleh Bonne règle de base sur les retours de promesses. (super nouvelle pour les promesses).
OriginalL'auteur Scott
J'ai été aussi à avoir ce problème.
Pour moi j'ai eu mon contrôleur d'appeler mon service, qui était alors de parler de l'api pour récupérer mes données.
Même si l'obtention de données a été de travailler (j'ai pu voir cela avec une console.journal) rien n'a été affiché sur la page web pour sélectionner à partir, et j'avais la
erreur.
Enfin j'ai réalisé que je devais retourner à mon appel au service.
le correctif qui a obtenu ce travail:
Donc encore une fois, j'ai juste besoin de retourner mon appel pour le service, puis le typeahead a fonctionné comme prévu et aucune erreur!
OriginalL'auteur jsuser
Dans vos services, vous devez renvoyer les données dans la fonction de rappel de
.success()
méthode.Je vois aussi une collection d'objets retournés. Et j'ai toujours l'erreur.
OriginalL'auteur Nhan Nguyen