angularjs – 角度UI路由器处理404

前端之家收集整理的这篇文章主要介绍了angularjs – 角度UI路由器处理404前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含我的API调用的服务的应用程序:
var ConcernService = {
    ...
    get: function (items_url,objId) {
        var defer = $q.defer();
        $http({method: 'GET',url: api_url + items_url + objId}).
            success(function (data,status,headers,config) {
                defer.resolve(data);
            }).error(function (data,config) {
                console.log('ConcernService.get status',status);
                defer.reject(status);
            });
        return defer.promise;
    },

我正在使用UI-Router在状态之间切换:

concernsApp

    .config( function ($stateProvider,$urlRouterProvider) {

        $urlRouterProvider.otherwise("/404/");


        $stateProvider.state('project',{
        url: '/project/:projectId/',resolve: {
            project: function ($stateParams,ConcernService) {
                return ConcernService.get('projects/',$stateParams.projectId);
            },},views: {
            ...
        }
    });

我正在使用正常的Angualr路由器,我很难理解如何实现404s.我可以看到ConcernService抛出的console.log状态被拒绝了,但是如何在状态路由器上抓到这个?

任何帮助非常感谢.

否则()规则仅在没有其他路由匹配时被调用.你真正想要的是拦截$stateChangeError事件,这是在状态转换中出现问题(例如,@R_404_323@失败)时被触发的.您可以在 state change event docs中阅读更多内容.

你最想做的最简单的实现就是这样:

$rootScope.$on('$stateChangeError',function(event) {
  $state.go('404');
});

另外,由于$http本身是建立在承诺(解决方案)的基础上的,您的ConcernService方法可以简化为单线程(我意识到您将其扩展为调试目的,但您可以轻松链接它,只是FYI ):

var ConcernService = {

  get: function (items_url,objId) {
    return $http.get(api_url + items_url + objId);
  }
}

猜你在找的Angularjs相关文章