【问题标题】:Angular 2 access child routes from URLAngular 2 从 URL 访问子路由
【发布时间】:2017-07-23 19:25:53
【问题描述】:

在我的主模块 (app.module) 中使用以下 Angular 2 路由,我能够成功浏览所有引用的组件视图。

const routes: Routes = [
    {path: '', redirectTo: 'home', pathMatch: 'full'},
    {path: 'home', component: HomeComponent},
    {path: 'other', component: OtherComponent},
    {path: 'extra', component: ExtraComponent},
    {path: 'group', component: GroupComponent,
        children: [
        {path: '', component: FirstPageComponent},
        {path: 'comp1', component: FirstPageComponent},      
        {path: 'comp2', component: SecondPageComponent},
        {path: 'comp3', component: ThirdPageComponent},
        {path: 'comp4', component: FourthPageComponent}
        ]
    },
    {path: '**', component: HomeComponent}
];

另外,使用 LocationStrategy,描述如下: LocationStrategy and browser URL styles

我可以访问

http://localhost:3000/extra

直接在地址栏输入,因为路径被重定向到应用程序的根目录并由 Angular 的路由处理。

但我不能直接访问像

这样的子路由

http://localhost:3000/group/comp2

这会产生 404 错误,因为请求的所有资源都从路径 http://localhost:3000/group/... 开始,这是不正确的。

通过 RouterLink 指令的应用内导航工作正常。

任何建议将不胜感激。

更新:

看来问题不是由 Angular 路由机制或 Web 服务器配置引起的。即使重新加载或在地址栏中键入路径,路由也能正常工作,因为 lite-server 配置为将所有路径重定向到 index.html。

问题在于 index.html 正在使用相对路径加载一些脚本和样式表,我的一个组件也是如此(加载配置文件)。

所以在重新加载/键入路径时

http://localhost:3000/group/comp2

服务器确实重定向到试图访问的 index.html,例如:

<script type="text/javascript" src="assets/vendor/bootstrap/js/bootstrap.min.js" ></script>

但是完整的 src 路径现在变成了:

src = "group/assets/vendor/bootstrap/js/bootstrap.min.js"

不存在的。

我可以使用绝对路径来解决这个问题,但是由于我的生产环境没有确定并且应用程序的根路径是未知的,所以这是不可能的。

我一直在尝试找到一种方法来在运行时确定应用程序的根路径并使 src=".." 链接动态但无法解决,所以我决定编辑我的路线,以便所有它们是兄弟姐妹,没有一个有子路由。

感谢您的帮助,对问题的误解深表歉意。

【问题讨论】:

  • 你是什么意思 因为所有被请求的资源都从路径 localhost:3000/group... 开始,这是不正确的 为什么这条路径不正确?我是否在这里遗漏了什么,这不会让我感到惊讶:D
  • 所有的 urls 只是应用程序路由,由 Angular 解析,而不是 Web 服务器。 webroot/group/ 下没有物理路径,也没有文件。所以永远不应该有这样的请求:http://localhost:3000/group/example_file.png。因此,要么我的网络服务器没有按照@bishop 的建议正确配置,要么我的 Angular 路由中缺少某些东西。
  • 我的路由也有同样的问题,但与您的问题相关的帖子对我没有帮助。你能解释得更清楚吗?谢谢。

标签: angular redirect routes


【解决方案1】:

问题很可能是你的index.html中没有设置标签。

<base href='/'>

我遇到了这个问题,并意识到 标记已不正确地插入到

标记之外。我把它移到里面,子路由开始为我工作。

【讨论】:

  • 感谢您的回复,但我已经解决了上述问题。已经 2 个多月了,但回头看我的 index.html,我看到 &lt;base href="/"&gt; 被注释掉了,所以我一定也试过了! :)
  • 很高兴您解决了这个问题。我想我会在这里添加这个,以防其他人遇到这个问题并且它会有所帮助。
【解决方案2】:

angular2 documentation中描述的index.html一样需要配置回退

【讨论】:

  • 我正在使用 lite-server 进行开发,文档指出: Lite-Server:随 Quickstart repo 一起安装的默认开发服务器已预先配置为回退到 index.html。 . 这似乎适用于路径http://localhost:3000/extra,但不适用于子路由。
猜你喜欢
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2017-02-18
相关资源
最近更新 更多