【问题标题】:Angular: URL change doesn't reload page first timeAngular:URL更改不会第一次重新加载页面
【发布时间】:2017-12-21 11:24:32
【问题描述】:

我知道这是一个糟糕的问题,我没有代码,但我希望有人能对此有所了解。

我有一个 Angular 网站。

该网站会加载不同产品的销售数据。产品名称显示在 URL 中

该网站从网站中的链接到不同产品都可以正常工作。

如果我直接使用产品名称更新 URL 并按 Enter 并且网站不会重新加载。我必须选择整个 URL 并再次按 Enter 以重新加载页面。

谁能想到为什么会发生这种情况?

【问题讨论】:

  • 你能给我一个例子,我可以告诉你
  • 按照我的说法,在 URL 中它应该得到一个正确的名称,它在 Angular 中的大小写 URL 是区分大小写的。
  • 它正在更改 url 中的参数,所以我不知道它是否有帮助。它可能类似于my-site.co.uk/products/100,如果我将其更改为my-site.co.uk/products/101 并按回车,它将不会加载页面,直到我再次选择网址并按回车
  • 订阅ActivatedRouter angular.io/guide/…

标签: angular


【解决方案1】:

您需要一种方法来告诉服务器您输入的 URL 是有效的 Angular 路由。因此您需要将这些 URL 映射到 index.html。

因为我在后端使用 Java/Spring。这是我的做法。这样就解决了问题:

@Controller
public class Routing {

    @RequestMapping({"/resources/**"}) 
    public String api(final HttpServletRequest request){
        String path = (String) request.getAttribute(
                HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
        return path;
    }

    @RequestMapping({ "", "/login", "/products/**" })
    public String gui() {
        return "forward:/index.html";
    }
}

这里第一个方法只是返回以“/resources/**”开头的路径,因为在这个路径下,我所有的 REST API 都是可用的。第二种方法转发到 Angular 路由的 index.html。

请注意,转发到 index.html 不会改变浏览器地址栏上的 URL,但会触发 Angular 进行控制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2012-10-13
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多