AngularJS mit einem interceptor Griff $http 404 - Versprechen nicht definiert Fehler
Habe ich eine Eckige app, für die ich verarbeiten wollen, 404 form einer API-Endpunkt. Die wichtigsten Komponenten sind wie folgt:
//app.js
var myApp = angular.module('myApp', ['ngRoute',]);
myApp.config( function ($httpProvider, $interpolateProvider, $routeProvider) {
$httpProvider.interceptors.push('httpRequestInterceptor');
$routeProvider
...
.when('/project/:projectId', {
templateUrl : 'partials/project_detail.tmpl.html',
controller: 'ProjectDetailCtrl',
resolve: {
project: function ($route, ConcernService) {
return ConcernService.get('projects/', $route.current.params.projectId);
},
}
});
});
//interceptors.js
myApp.factory('httpRequestInterceptor', function ($q, $location) {
return {
response: function(response){
return promise.then(
function success(response) {
return response;
},
function error(response) {
if(response.status === 404){
$location.path('/404');
return $q.reject(response);
}
else{
return $q.reject(response);
}
}
);
}
};
});
//services.js
myApp.factory('ConcernService', function ($http, $q) {
var ConcernService = {
...
get: function (items_url, objId) {
var defer = $q.defer();
$http({method: 'GET',
url: api_url + items_url + objId}).
success(function (data, status, headers, config) {
defer.resolve(data);
}).error(function (data, status, headers, config) {
//when API not found, status == 404
console.log('ConcernService.get status',status);
defer.reject(status);
});
console.log('ConcernService.get promise',defer.promise);
return defer.promise;
},
}
});
Das Problem ist, ich erhalte eine Fehlermeldung von ReferenceError: promise is not defined at response
. Ist dies, weil die ConcernService
verschiebt die promise
? Wie soll ich damit umgehen?
InformationsquelleAutor der Frage Darwin Tech | 2014-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, meine Lösung, die funktioniert, mit der neuen
interceptor
syntax ist wie folgt:Dies ist eine vereinfachte version, sondern zeigt, wie ich den
interceptor
Muster zu lösen mein Problem.Kommentare sind willkommen.
InformationsquelleAutor der Antwort Darwin Tech
Ich denke, die Struktur, die Sie interceptor kann ausgeschaltet werden. Ich stellte eine Antwort mit einem Beispiel-interceptor hier ( Behandeln von HTTP 302-Antwort vom proxy in angularjs ), die Sie vielleicht nützlich finden. Es funktioniert für mich, auf einer täglichen basis.
InformationsquelleAutor der Antwort MBielski
Ist einfach leichter zu passieren parameter wie
<div class="fullPortfolio" ng-show="projectId.length">Project Id passed</div>
dann, wenn die Projekt-id ist nicht vorhanden
<div class="fullPortfolio" ng-show="!projectId.length">Project Id is not exist</div>
InformationsquelleAutor der Antwort Digital Legend