Angularjs/Ionique TypeError: Cannot read property 'puis' undefined
codes:
js:
angular.module('starter.services', ['ngResource'])
.factory('GetMainMenu',['$http','$q','$cacheFactory',function($http,$q,$cacheFactory) {
var methodStr = 'JSONP';
var urlStr = 'http://localhost/bd/wp-admin/admin-ajax.php';
var ptStr = {action:'bd_get_main_menus',callback:'JSON_CALLBACK'};
return {
getMainMenuItems: function(){
var deferred = $q.defer();
$http.jsonp(urlStr,{params: ptStr})
.success(function (data, status) {
deferred.resolve(data);
return deferred.promise;
})
.error(function (data, status) {
deferred.reject(data);
return deferred.promise;
});
}
}
}])
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http,GetMainMenu) {
GetMainMenu.getMainMenuItems().then(
function(data){
$scope.mainMenus = data;
});
});
exécuter résultat:
TypeError: Cannot read property 'puis' undefined
à nouveau (ht.../www/js/contrôleurs.js:42:33)
à invoquer (ht.../www/lib/ionique/js/ionique.bundle.js:11994:17)...
où est le mal dans ces codes?
"Impossible de lire la propriété", puis "undefined" Votre GetMainMenu.getMainMenuItems() n'est pas définie, et elle devait être la promesse de l'objet à l'appel de la méthode then(). Le Format de votre code.
Ne pas utiliser le différés antipattern!
Ne pas utiliser le différés antipattern!
OriginalL'auteur johnny Lau | 2015-01-29
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de retourner
deferred.promise
de la getMainMenuItems fonction au lieu de dans les fonctions de rappel utilisé pour$http.jsonp
. C'est parce quegetMainMenuItems
doit renvoyer une promesse.Une autre alternative est de simplement retourner la promesse de
$http.jsonp
:Le report de l'anti modèle peut être évité en utilisant les alternatives suggérées ci-dessus. Je suis d'accord qu'il est préférable d'éviter le report de l'anti modèle.
OriginalL'auteur Wayne Ellery
Vous devez retourner la promesse de l'objet à l'extérieur de l' $http.
Vous pouvez également retourner les $http, car c'est une promesse, n'est pas nécessaire d'avoir une autre promesse.
OriginalL'auteur hayatoShingu