当前位置: 首页 > 知识库问答 >
问题:

页面未重定向到无效url上的指定页面

施翰学
2023-03-14

我有下面的角函数。

功能:

var App = angular.module('app', ['ui.bootstrap', 'ngRoute', 'ngAnimate']);

App.config(['$routeProvider', function($routeProvider) {

    $routeProvider

        .when('/', {
            templateUrl: 'views/dashboard.html'
        })
        .when('/:pages', {
            templateUrl: function(routeParams) {
                return 'views/' + routeParams.pages + '.html';
            }
        })
        .otherwise({redirectTo: '404.html'})

}]);

我有一个侧栏导航控件。我已经创建了4页。

因此,当我单击这些导航项时,相应的页面将正确打开。

还有一些我还没有创建的页面。但根据下面的函数。

当我没有不存在的东西时,它必须返回到404。存在于文件夹根目录中的html文件。

发生的事情是,我在控制台中没有收到错误,地址栏中的url反映了上次单击的有效页面。

有人让我知道我在哪里犯了错误,这种方法对于动态路由是否正确?

共有3个答案

孟修竹
2023-03-14

reDirectTo更新$位置,因此不必指定. html,而是指定routeParameter。

你最好这样做:

[...]
.when('/error', { templateUrl: '404.html' })
.otherwise({redirectTo: '/error'});
陈朗
2023-03-14

否则将在没有其他定义匹配时调用。但是您的/:页面定义总是匹配的,否则将不会被调用。否则定义在尝试加载模板时不会对来自服务器404的响应。

最简单的解决方案是为每个页面创建路由定义,而不是一般的路由定义。例如。当('/page1',…)时。当('/page2',…)等等

巩阳秋
2023-03-14

否则()部件捕获与任何指定路由不匹配的路径
在您的情况下,路由匹配,但模板在指定的URL处不可用
$routeProvider对此一无所知,也无能为力。

您可以做的是以某种方式(见下文)检查模板是否可用,以及是否不使用$place重定向到适当的路径(例如/false/404)。

为了确定页面是否有效(即其模板可用),您可以尝试访问模板(使用$超文本传输协议)并捕获任何错误(指示没有模板)等。但是我不喜欢这种方法(因为依赖模板的可用性来确定页面的存在/有效性不是一个很好的实践,例如,在网络或服务器问题等情况下,它很容易导致误导性的错误消息)。

我最喜欢的方法是保留一个“有效”/现有页面的列表,并对其进行检查。如果当前页面应可用,则按常规获取模板等。如果不可用,则重定向到错误页面。

上面描述的逻辑可以放在$routeProviderresolve属性中(因此它会在实例化控制器和加载视图之前执行)。

例如。:

var app = angular.module(...);

// This should be a constant, so it can
// get injected into configuration blocks
app.constant('EXISTING_PAGES', [
  'page1',
  'page2',
  ...
]);

app.config(function configRouteProvider($routeProvider, EXISTING_PAGES) {    
  $routeProvider.
    when('/', {
      templateUrl: 'views/dashboard.html'
    }).
    when('/:page', {
      templateUrl: function getPageTemplateUrl(routeParams) {
        return 'views/' + routeParams.page + '.html';
      },
      resolve: {
        exists: function resolveExists($location, $route) {
          // Because this is executed before the instantiation of the 
          // controller and the view is not fully loaded yet, the parameters
          // should be accessed via `$route.current.params`
          if (EXISTING_PAGES.indexOf($route.current.params.page) === -1) {
            // This is not a valid/existing page, 
            // let's redirect to an appropriate error page
            $location.replace();   // Replace the URL in the history
            $location.path('/error/404');
          }
          return true;
        }
      }
    }).
    // This should be a separate route, so we can redirect to it
    when('/error/404', {
      templateUrl: '404.html'
    }).
    otherwise({
      redirectTo: '/error/404'
    });
});

还有,看这个简短的演示。

 类似资料:
  • 原始网址:https://-webapp*.tl.co.in/TSEERMDEV/ 登录期间:https://login.microsoftonline.com/f35425af-4755-4e0c-xxxx-b3cb9f1c6afd/oauth2/v2.0/authorize?client_id=cccccccc-219d-4c3b-bbc9-a1d32caa79a3 重定向url:https:

  • 我有一个文件,带有一个,具有和字段,在上,它用

  • 问题内容: 我做了一个新的吊舱并将其推到行李箱。它出现在cocoadocs(http://cocoadocs.org/docsets/KeyboardLayoutHelper/0.0.1/)页面中,但是http://cocoapods.org/pods/KeyboardLayoutHelper重定向到github。 与一起安装时,吊舱可以正常工作。 我做错了什么还是应该提交给cocoapods.o

  • 我对WordPress有意见。该网站工作相当正常,但在管理面板上,各种页面,如编辑帖子,安装插件,添加新插件,添加新页面,设置重定向到主页我。我疯狂地在谷歌上搜索了3天,但我刚刚发现了mod_安全问题。结果对我来说也没用。 这是我的.htaccess文件

  • 问题内容: 假设我有一个用于编辑Pony属性的表单,并且在我的Web应用程序中有多个位置可以选择编辑Pony。例如,在小马列表中,每个小马旁边可能都有一个“编辑”链接,并且当用户查看小马时,该视图中也可能有“编辑”链接。 当用户在编辑Pony后单击“提交”时,我想使用户返回他或她单击“编辑”链接时所在的页面。 如何编写控制器以将用户重定向回他们开始的地方?当然,我可以通过向控制器传递参数来做到这一

  • 问题内容: 我想做的是,当他们最初使用此方法时,进入免责声明页面,然后在此之后的任何时候都转到另一个页面。我当前的方法只是带给我免责声明页面。让我知道是否需要进一步解释…谢谢!!! 基本上,我需要在第一次点击此方法时添加一个If来转到页面,我想是这样的: 问题答案: 当该人第一次点击该页面时,在会话层上抛出一个标志。然后,无论何时有人进入页面,您都可以检查它是否存在,并相应地重定向他们。唯一的问题