我为NotificationService编写了一个工厂,它将在我的拦截器中调用,以检测HTTP 4xx状态代码并导致警报显示在屏幕顶部。警报使用AngularStrap's alert module。
app.js
var app = angular.module('app', [
'app.filters',
'app.services',
'mgcrea.ngStrap.alert'
]);
var Svc = angular.module('app.services', []);
app.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
// Setup all states here…
$stateProvider
.state('home')
.state('about')
.state('blog');
// Interceptor
$httpProvider.interceptors.push("myInterceptor");
});
NotificationService.js
Svc.factory('NotificationService', function($alert) {
var obj = {};
// default options for AngularStrap $alert
var default_options = {
placement: 'top',
show: true,
duration: 3,
container: 'body'
}
obj.error = function(data) {
angular.extend(default_options, data); // Merge 'message' property of data into default options
default_options.type = 'danger';
$alert(default_options); // This triggers the alert appearing in the view
}
return obj;
});
myInterceptor.js
Svc.factory('myInterceptor', function($q, NotificationService) {
return {
responseError: function (response) {
// Show an alert with the message property in response.data
NotificationService.error(response.data);
// do something on error
return $q.reject(response);
}
};
});
关于我的代码的东西是非常错误的,但我不知道在哪里。阅读AngularStrap的文档时,它提到$alert
作为服务公开,可以在控制器/指令中使用。如果我在另一家工厂使用它是否重要?是我如何包含mgcrea.ngStrap.alert
依赖项(它应该在app.services数组中)吗?
我无法记住确切的错误消息(它正在工作),但错误指向this。我记得错误的是它打印的内容如下:
$modalProvider <- $alert <- NotifcationService <- <blah blah blah>
我希望这会有所帮助。
答案 0 :(得分:0)
他们的文档说你需要包含模态模块,可能在警报模块之前
mgcrea.ngStrap.modal
是的,它应该作为依赖项包含在您实际注入$ alert服务的模块中,即app.services
答案 1 :(得分:0)
在拦截器中注入$ injector并在$ http初始化之后使用它来检索依赖关系,就在您需要它们时。这些依赖项是您的应用程序的注册服务,不会重新创建!