在Angular中显示应用内错误消息的最佳方式

时间:2015-03-09 22:40:45

标签: angularjs exception

我一直试图找出处理从Angular中的API获得204/404的最佳方法。我当前的平面只是删除当前视图,而是显示一个向用户发送消息的框。

这似乎是$http.interceptors的工作,所以我设置了我的配置:

angular.module('myApp', [])
    .config(function($stateProvider, $urlProvider, $httpProvider, myUrls) {
        $stateProvider
            .state('home', {
                url: '/home',
                controller: 'HomeCtrl',
                templateUrl: '/path/to/template/home.html'
            })

            .state('error', {
                url: '/error',
                controller: 'ErrorCtrl',
                templateUrl: '/path/to/template/error.html'
            });

        $httpProvider.interceptors.push(function() {
            return {
                response: function(res) {
                    if(res.config.url === myUrls.data && [204, 404].indexOf(res.status) > -1) {
                        // show the error message
                    }
                }
            };
        });
    })

    .constant('myUrls', { data: '/api/endpoint' });

问题在于,如果我在我的$state中添加了尝试依赖注入$httpProvider,以便我可以使用$state.go导航到错误页面,我创建了一个循环依赖:

Uncaught Error: [$injector:cdep] Circular dependency found: $http <- $templateFactory <- $view <- $state <- $http

我错过了什么吗?返回特定状态代码时,是否有更好的方法可以向用户触发状态/异常消息?我是否应该为此目的使用ui.router

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这种循环依赖问题。例如:

  • 在$ rootScope上发出一个事件,并有一些服务观察事件并在收到事件时使用$ state
  • 注入$ injector,并在需要时按名称从注入器获取$ state服务