【问题标题】:Using @RouteConfig, is it possible prevent browser's address bar from being changed?使用@RouteConfig,是否可以防止浏览器的地址栏被更改?
【发布时间】:2016-04-13 21:17:17
【问题描述】:

有了这个@RouteConfig --> 是否可以防止浏览器的地址栏保持为“http://foo.com/”,其中“/”保持为“/”,并且根本不将“/Home”附加到浏览器的地址栏? Angular 在同一个网页内部传递 url,为什么浏览器的地址栏不应该改变?

我们不希望客户继续使用网络浏览器的后退按钮并弄乱网页数据。

@RouteConfig([
    {
        path: '/',
        name: 'SignIn',
        component: SignInComponent,
        useAsDefault: true
    },
    {
        path: '/', //Home',
        name: 'Home',
        component: MemberHomeComponent
    }
])

【问题讨论】:

  • 我认为路由的要点是不断变化的 url、浏览器历史记录以及转到特定 url 并加载特定组件的能力。使用其他技术可能会更好?
  • 路由器完全基于浏览器 URL 工作,我认为您所期望的使用 angular2 路由器是不可能实现的。
  • 路由应该与 url 一起使用。 DynamicComponentLoader 可能是您正在寻找的,这样您就可以在内部更改组件而无需在任何地方进行路由。
  • DynamicComponentLoader 也是我正在研究的另一件事。经过一些试验和错误,我开始同意我们不会从Router 中获得太多收益。 PlatformLocationBrowserPlatformLocation 很新,我也在努力理解它。

标签: angular angular2-routing


【解决方案1】:

您可以创建自己的PlatformLocation 实现,它不使用pushState(),而是将历史记录保存在一个数组中。

你可以使用BrowserPlatformLocation

你可以让 Angular 使用你的实现

bootstrap(AppComponent, [
    ROUTER_PROVIDERS, 
    MyNoUrlBrowserPlatformLocation,
    provide(PlatformLocation, {useExisting: MyNoUrlBrowserPlatformLocation})
]);

【讨论】:

  • 有没有更好的使用MyNoUrlBrowserPlatformLocation的例子?我还在研究PlatformLocationBrowserPlatformLocation 的用法,但它似乎很新,还没有多少人知道如何使用它。
  • BrowserPlatformLocation 将是自定义 PlatformLocation 的示例。否则我不知道。这就是我会尝试的方法。
猜你喜欢
  • 2014-12-16
  • 2013-08-06
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多