Javascript Angularjs 1.4拦截器不工作
首先,我要说我是一个有棱角的傻瓜,所以我怀疑这是一个基于我缺乏理解的愚蠢错误 我正在尝试创建一个拦截器来处理请求和响应错误 如果我在文件的顶部放置一个警报,它被调用,因此文件正在加载。但是,在调用配置之前,没有任何其他警报,包括文件底部的警报。responseError和requestError从未被调用 我试着将其简化到再现问题的最小值,我试过几个不同的例子,说明如何在使用过时代码的情况下实现它,我试着在控制器中注释错误子句,以防它吞下异常。。。。。我一天的大部分时间都在谷歌上搜索,试图让它发挥作用,但我被难倒了Javascript Angularjs 1.4拦截器不工作,javascript,angularjs,angular-http-interceptors,Javascript,Angularjs,Angular Http Interceptors,首先,我要说我是一个有棱角的傻瓜,所以我怀疑这是一个基于我缺乏理解的愚蠢错误 我正在尝试创建一个拦截器来处理请求和响应错误 如果我在文件的顶部放置一个警报,它被调用,因此文件正在加载。但是,在调用配置之前,没有任何其他警报,包括文件底部的警报。responseError和requestError从未被调用 我试着将其简化到再现问题的最小值,我试过几个不同的例子,说明如何在使用过时代码的情况下实现它,我试着在控制器中注释错误子句,以防它吞下异常。。。。。我一天的大部分时间都在谷歌上搜索,试图让它发
$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
return {
'responseError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
},
'requestError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
}
};
});
alert('myHttpInterceptor done');
module.config(['$httpProvider', function ($httpProvider) {
alert('myHttpInterceptor push');
$httpProvider.interceptors.push('myHttpInterceptor');
}]);
非常感谢任何帮助,尤其是对正在发生的事情的深入了解
----为后代解答相关信息----
根据sbedulins和Angad的答案,我能够得到它
工作
首先,一旦我让它工作起来,它在responeError和RequestError周围使用和不使用单引号都可以工作
dependency1和dependency2未定义,我在这里得到的一个简化示例中出现了剪切粘贴错误。所以我把它们拿走了
然后我用angular.module('defaultApp')替换了模块,所以模块在示例中是一个占位符,而不是某种方便的全局存储它。。。您需要明确定义模块(或变量模块)
(是的,我真的是个新手)
因此,一旦所有这些更改都应用到sbedulins示例中,我就得到了这两种方法的工作代码,对于postetity,这里是我应用程序中的实际工作代码
angular.module('defaultApp').config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
$provide.factory('myHttpInterceptor', function ($q) {
return {
responseError: function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
},
requestError: function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
}
};
});
$httpProvider.interceptors.push('myHttpInterceptor');
}]);
或
非常感谢你们的帮助,我在示例中学习了有关角度速记的重要内容。sbedulin得到了答案,尽管我需要评论的帮助才能让他/她的答案发挥作用通过
$provide
的拦截器应该在config
阶段定义,然后将其推送到$httpProvider.Interceptors
module.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
return {
'responseError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
},
'requestError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
}
};
});
$httpProvider.interceptors.push('myHttpInterceptor');
}]);
或者,您可以按中的定义推送匿名函数
此处描述的工作plunker用例尝试删除'requestError'和'responseError'中的单引号。您如何定义
模块
?另外,dependency1
,dependency2
应该在模块中定义(这些被注入到您的拦截器中)。被angular.module('defaultApp')之类的东西替换。是的,首先模块是用它的依赖项创建的,例如,var module=angular.module('app',['module1','module2')代码>。然后,模块可以由全局变量module
引用,也可以由angular.module('app')
引用,而不使用第二个参数(第二种方法更好,因为它不会污染带有module
var的全局命名空间)。请注意,指定“module1”、“module2”、“dependency1”、“dependency2”仅用于示例。有关工作示例,请参阅我答案的结束链接。
module.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
return {
'responseError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
},
'requestError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
}
};
});
$httpProvider.interceptors.push('myHttpInterceptor');
}]);
module.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push(function ($q, dependency1, dependency2){
return {
'responseError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
},
'requestError': function (rejection) {
alert("Something went wrong");
return $q.reject(rejection);
}
};
});
}]);