当前位置: 首页 > 面试题库 >

AngularJS UI路由器处理404

孔安福
2023-03-14
问题内容

我有一个带有服务的应用程序,该服务包装了我的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, status, headers, 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: {
            ...
        }
    });

我不再使用普通的AngularJS路由器,并且难以理解如何实现404。我可以看到ConcernService抛出console.log状态被拒绝,但是如何在状态路由器中捕获它呢?


问题答案:

otherwise()仅当没有其他 路由
匹配时才调用该规则。您真正想要的是拦截$stateChangeError事件,即在状态转换中出现问题(例如,解析失败)时触发的事件。您可以在状态更改事件文档中阅读有关此内容的更多信息。

您要执行的操作的最简单实现是这样的:

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

同样,由于$http它本身是基于promise(可resolve解析)构建的,因此您的ConcernService方法可以简化为单一格式(我知道您是出于调试目的而对其进行扩展的,但是可以像FYI一样轻松地将其链接起来):

var ConcernService = {

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


 类似资料:
  • 我试图用ApacheCamel和Spring Boot编写我的第一个项目。它应该调用Restendpoint并处理数据,但从未调用我的处理器。我做错了什么? 日志显示路由已启动并且它从“Direct://httpRoute”中消耗。但在最后没有日志表明调用了MyProcess。 pplication.java 我的路线。JAVA pom.xml 日志

  • 问题内容: 自从我开始解决这个问题已经有几个小时了,我似乎无法解决这个问题。 我有一个可能会导致用户实际输入URL的应用程序。在这种情况下,不难相信用户可能会输入斜杠。例如, www.example.com/users/2和www.example.com/edit/company/123 应该与 www.example.com/users/2/和www.example.com/edit/compa

  • 要部署我的应用程序,我能想到的唯一方法是使用Tomcat。因此,我复制了项目的bundle.js和index.html文件,并将其放在eclipse IDE的WebContent中。下面是index.js文件: 因此,当我使用web pack dev server时,我的路由器工作正常,但当我将文件复制到eclipse项目的web content时(这将为我设置一切,并使项目可以使用这个Url h

  • 问题内容: 我正在使用Angular2开发NodeJS应用程序。在我的应用程序中,我有一个主页和搜索页面。对于主页,我有一个将为 localhost:3000 /* 呈现的HTML页面,并且从主页用户导航到 搜索, 即 我由 angular2路由 处理的 localhost:3000 / search 页面。 * 我没有搜索页面的页面,其视图由angular2呈现。但是当我直接点击 localho

  • 试图使某些路由需要身份验证。 我有这个: 注意:是的,身份验证服务正常工作。 对于每个路由,我检查用户是否经过身份验证,如果没有,那么我想将他们重定向到登录页面,如果他们是,那么它将在第一个页面上着陆,路由为"/"。 我得到的只是: 我哪里做错了?

  • anu可以完美与react-router搭配使用。 但强烈建议使用reach router, 这个比react router更好用。 anujs也对它进行改造,让它支持IE8的hashchange reach的官网 https://reach.tech/router resolve: { alias: { react: "anujs", "react-dom":