javascript - 如何在 Angular 中将非哈希 URL 重定向到具有哈希的 URL?

标签 javascript angular angular2-routing

所以用户收到一个 URL,它看起来像 http://myapp.com/foo .

因为我的 Angular 的应用程序路由是“使用哈希”工作的,所以适当的组件在 http://myapp.com/#/foo 下可用。 .

因为我有这样一条路线:

{ path: '',   redirectTo: '/mainpage', pathMatch: 'full' }

http://myapp.com/foo由它处理并重定向到 http://myapp.com/#/mainpage

我想要实现的是从 http://myapp.com/foo 做一个重定向至 http://myapp.com/#/foo .当然,我希望保持重定向到/#/mainpage,就像现在一样。

我如何在 Angular 7 中做到这一点? 如果只有 redirectTo param 可以将函数作为值而不是字符串,让我自己处理那里的重定向,那将是一些东西。但恐怕这是不可能的。

//更新

我想到的是使用 InitialRedirectGuard和一个空的子数组而不是 redirectTo对于 path: ''对象。

    path: '',
    children: [],
    canActivate: [InitialRedirectGuard],
    pathMatch: 'full',

重定向的逻辑位于 InitialRedirectGuard 中,我在其中使用 window.location.pathname 来查看我来自的 URL。然后 router.navigate 发生了。我猜不是很酷,但似乎有效。

最佳答案

只需将下面的脚本添加到您的index.html。它所做的是检查您的 URL 中是否有/#/,如果没有找到,它会重定向到等效的/#/路由。

因此访问 http://myapp.com/foo 将重定向到 http://myapp.com/#/foo

<script>
  // auto redirect to hash# URL
  if (!window.location.href.match(/\/#/)) {
    window.location.href = window.location.origin + '/#' + window.location.pathname + window.location.search;
  }
</script>

关于javascript - 如何在 Angular 中将非哈希 URL 重定向到具有哈希的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55714209/

相关文章:

javascript - 在 beforeunload 事件上查询数据库

javascript - Angular 2/4 动态加载脚本

angular - 错误: SyntaxError: Unexpected token <

Angular 2 : 404 error occur when I refresh through the browser

angular - ng-bootstrap模式中的变量不会立即更新

url - 角度 2 : One path for multiple components?

javascript - 检查输入长度不超过 10

javascript - 将函数的副本分配给 var

javascript - 如何使用 javascript 轻松修改 yaml 文件?

Angular Material 表不显示数据