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

了解如何从角度路由中删除哈希值#

柴阳云
2023-03-14
问题内容

在删除井号之前,我已经

mainApp.config(function ($locationProvider, $routeProvider) {
    $routeProvider
    .when('/page', {
        controller: 'Page',
        templateUrl: 'templates/page.html'
    })
    .when('/main', {
        controller: 'Main',
        templateUrl: 'templates/main.html'
    })
    .otherwise({ redirectTo: '/main'});

    //$locationProvider.html5Mode(true);
});

这些工作正常

http://localhost:8080/index.html#/main
http://localhost:8080/index.html#/page

删除井号后,我将其添加到index.html

<base href="/">



<script src="/vendor/bootstrap-dist/js/bootstrap.min.js"></script>
<script src="/vendor/javascript/angular/angular.js"></script>
<script src="/vendor/javascript/angular/angular-route.js"></script>
<script src="/vendor/javascript/angular/ui-bootstrap-tpls-0.11.2.min.js"></script>
<script src="/javascript/index.js"></script>
<script src="/javascript/controllers/main.js"></script>
<script src="/javascript/controllers/page.js"></script>

和index.js

$locationProvider.html5Mode(true);

现在点击http://localhost:8080重定向到http://localhost:8080/main

http://localhost:8080/main直接在浏览器中返回404以及其他页面

我应该怎么做才能解决这个问题?

我的后端是Java


问题答案:

那是意料之中的。以下是未打开html5时发生的情况:

  • http://localhost:8080/index.html#/main在地址栏中输入网址
  • 浏览器向localhost:8080 / index.html发出http请求,并获取html页面作为响应
  • html页面包含一个已执行的角度应用程序。角度路由器解析散列(/ main)之后的路径,从而加载关联的视图和控制器

现在,启用html5模式并加载index.hml会发生什么?

  • http://localhost:8080/index.html在地址栏中输入网址
  • 浏览器向localhost:8080 / index.html发出http请求,并获取html页面作为响应
  • html页面包含一个已执行的角度应用程序。角度路由器解析路径(/index.html),发现它与任何路由都不匹配,因此将地址栏中的位置更改为默认位置:/ main,然后加载关联的视图和控制器。更改地址栏中的位置除了使浏览器在导航历史记录中添加新条目外,不会使浏览器执行任何其他操作。

现在,如果您单击刷新或直接http://localhost:8080/main在地址栏中输入会发生什么?那么,在这种情况下,您是在说浏览器:“请在url上加载页面http://localhost:8080/main。这就是浏览器的工作:它将HTTP请求发送到http://localhost:8080/main。由于服务器在此地址没有任何内容,因此它将发回404。

现在如何使其工作?实际上非常简单:您需要配置服务器,使其在收到路径/main(以及角度应用程序的所有其他路径)请求时发回index.html页面。这样,浏览器将加载HTML页面,包含的角度应用程序将重新启动,角度路由器将从/mainURL
解析路径(),从而将加载与该路径关联的视图和控制器。



 类似资料:
  • 问题内容: 我要在我的一个项目中对分页进行ajax化,并且由于我希望用户能够为当前页面添加书签,因此我通过哈希附加页面编号,例如: 并且多数民众赞成在它工作正常,一切,除了,当页码为1时,我不想成为,我只是希望它成为 我尝试了以下变体: 的作品,但网址现在就像,我不很哈希那里。 根本不使用window.location.hash,但是当用户从第3页回到第1页时,他位于第1页,但是url仍然是因为我

  • 问题内容: 我正在尝试使用locationProvider从angular js的url路由中删除主题标签,但它给了我错误。 app.js 错误: 我想念什么吗? 编辑:用这样的选项对象调用html5Mode函数 我收到以下错误(更改为角度满角以更好地解释错误,而不是缩小版本) http://errors.angularjs.org/1.3.13/$location/nobase 问题答案: 您可

  • 问题内容: 我正在使用react- router进行路由,并使用hashHistory选项,以便可以从浏览器刷新页面或指定现有路由之一的url并到达正确的页面。它工作正常,但我在URL中看到的哈希是这样的: http:// localhost /#/ login?_k = ya6z6i 这是我的路由配置: 问题答案: 您是否尝试过browserHistory选项?您还可以从浏览器刷新页面,或指定现

  • 问题内容: 我正在尝试从Angular 2中的网址中删除#号,但找不到如何在不产生任何问题的情况下删除它的任何好的解释。 我记得在AngularJS 1上添加起来比较容易 如果您能告诉我这是否是一种好的做法(删除#)或可能会影响应用程序的SEO(或对其进行改进),我也将不胜感激。 PS:我正在将Angular 2与打字稿一起使用 问题答案: 正如@Volodymyr Bilyachat指出的那样,

  • 我想在命令行上这样做,所以像这样的事情会很好: 上面的方法当然不适合散列。所以最后我需要打电话 以自动化的方式。

  • 我使用react-router进行路由,并使用hashHistory选项,这样我就可以从浏览器刷新页面,或者指定现有路由的url,然后登陆到正确的页面。它工作得很好,但我在url中看到的哈希如下所示:http://localhost/#/login?_k=ya6z6i 这是我的路由配置: