从app.config调用服务

时间:2015-04-27 09:52:14

标签: javascript angularjs

我创建了一个$httpProvider拦截器,就像所描述的那样here

$httpProvider.interceptors.push(function ($q) {
    return {
        'responseError': function (response) {

            var _status,
                _message;

            switch (response.status) {
                case 403:
                    _status = 'warning';
                    _message = 'no rights to do this';
                    break;
                case 500:
                    _status = 'danger';
                    _message = 'internal server error';
                    break;
            }


            Alert.add({status: _status, msg: _message});

            return $q.reject(response);
        }
    };
});

Alert是我用来显示通知,错误等的服务。它取决于$rootScope,只是添加一个要在html中呈现的对象。

所以问题是:如何从定义了这个拦截器的Alert调用我的app.config服务?或者,如果不可能,我如何在一个地方捕获所有http错误并显示它们?

1 个答案:

答案 0 :(得分:1)

您需要使用$injector,然后在拦截器内部,您可以通过$injector.get任何服务名称来获取服务。

<强>代码

$httpProvider.interceptors.push(function ($q, $injector) {
    return {
        'responseError': function (response) {
            var service = $injector.get('myService'); //here you can get service
            var _status,
                _message;

            switch (response.status) {
                case 403:
                    _status = 'warning';
                    _message = 'no rights to do this';
                    break;
                case 500:
                    _status = 'danger';
                    _message = 'internal server error';
                    break;
            }


            Alert.add({status: _status, msg: _message});

            return $q.reject(response);
        }
    };
});

<强>更新

根据@zeroflagL解决方案,只需直接在函数中依赖注入服务,它就可以更简单地工作。

<强>代码

$httpProvider.interceptors.push(function ($q, myService) {
    return {
        'responseError': function (response) {
            var _status,
                _message;

            switch (response.status) {
                case 403:
                    _status = 'warning';
                    _message = 'no rights to do this';
                    break;
                case 500:
                    _status = 'danger';
                    _message = 'internal server error';
                    break;
            }


            Alert.add({status: _status, msg: _message});

            return $q.reject(response);
        }
    };
});