2013-10-12 11 views
3

我正在使用Angularjs 1.2.0rc1。整天我一直在试图让角度拦截器的工作。我已经缩小了问题,因为$ httpProvider.interceptors.push似乎是未定义的,我不知道为什么,其他一切工作正常。尝试使用angularjs拦截器时出错未捕获无法调用未定义的方法“推”

以下是在module.config我有以下代码的代码示例

services.factory('testInterceptor', function ($q) { 
return {  
    'response': function(response) { 
    console.log(response); 
    return response || $q.when(response); 
    },  
    'responseError': function(rejection) { 
    console.log(rejection); 
    return $q.reject(rejection); 
    } 
}; 
}); 

$httpProvider.interceptors.push('testInterceptor'); 

如果我删除上面的代码,应用程序工作正常,但如果它的存在,我一直收到这个错误我的控制台上

“遗漏的类型错误:无法调用未定义的‘推’离MyModule的“。

“myModule”是模块的名称。

请注意,从我的调查“$ httpProvider.interceptors”似乎未定义,我不知道为什么它,任何洞察力将有所帮助。

我感谢您的任何帮助/提示。

+0

您能否提供更多关于模块如何组合的信息?我做了一个小测试,一切工作正常:http://plnkr.co/edit/s3ld5b?p=preview – Jonas

+2

嗨,乔纳斯,非常感谢答案,我不知何故设法解决它。问题是,咕噜生成是使用谷歌CDN的角度框架,它正在加载一个旧版本的angularjs,具体角度为1.0.7。 –

+1

@EricK你的建议也适用于我。 –

回答

1

你的配置看起来像下面那样吗?

myModule.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('testInterceptor'); 
}]); 

我用拦截器,但内嵌导致这种代码:

myModule.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function($q) { 
    return { 
     // optional method 
     'request': function(config) { 
      return config || $q.when(config); 
     }, 

     // optional method 
     'requestError': function(rejection) { 
      return $q.reject(rejection); 
     }, 

     // optional method 
     'response': function(response) { 
      return response || $q.when(response); 
     }, 

     // optional method 
     'responseError': function(rejection) { 
      return $q.reject(rejection); 
     } 
    } 
    }) 
}]); 

但我似乎从来没有进入requestError或responseError,即使服务器抛出一个500错误,但是这看起来像另一个问题。希望这个代码示例有帮助。

相关问题