【发布时间】:2015-01-30 19:45:28
【问题描述】:
当我尝试在 AngularJs 中使用拦截器时出现以下错误,Requirejs 与 ui-router。如果我与 $routeProvider (ngRoute) 一起使用,那就完美了。
代码有什么问题?
谢谢。
无法实例化模块 devWeb,原因是: TypeError:无法读取未定义的属性“推送” 在 ResponseInterceptor
代码进行拦截。
(function () {
"use strict";
define(
function () {
var ResponseInterceptor = function ( $httpProvider ) {
var globalResponseInterceptor = function ( promise ) {
var onSuccess = function ( packet ) {
if( angular.isString(packet.data) ) {
return packet;
}
return packet;
};
var onFault = function (fault) {
var error = angular.isDefined( fault.error ) ? fault.error :
angular.isDefined( fault.status ) ? {
code: fault.status,
message: "Unexpected Server Error"
} : {
code: "404",
message: "Not Found"
};
return $$q.reject( error) ;
};
return promise.then( onSuccess, onFault );
};
var registerInterceptor = function ( sessao, $rootScope ,$q ) {
$$q = $q;
$scope = $rootScope;
errorModel = sessao.error;
return globalResponseInterceptor;
};
$httpProvider.responseInterceptors.push( [ "sessao", "$rootScope", "$q", registerInterceptor ] );
};
return [ "$httpProvider", ResponseInterceptor ];
});
}());
要实例化的代码。
define([...],
function ( RouteManagerServico, ResponseInterceptor ) {
var app, appName = 'devWeb';
app = angular
.module( appName, [ "ngCookies", "ui.router", "ngRoute", "ngSanitize"] )
.config( RouteManagerServico )
.config( ResponseInterceptor )
.run( [ "$rootScope", "$state", "$location", function( $rootScope, $state, $location ) {
$rootScope.$state = $state;
$rootScope.$location = $location;
}] );
angular.bootstrap( document.getElementsByTagName("body")[0], [ appName ] );
return app;
}
);
【问题讨论】:
-
问题是 angular 1.2 到 1.3 的版本。之前 httpProvider.responseInterceptors 现在是 $httpProvider.interceptors。链接 docs.angularjs.org/guide/migration
标签: angularjs requirejs angular-ui-router route-provider