【发布时间】: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
我可以访问
直接在地址栏输入,因为路径被重定向到应用程序的根目录并由 Angular 的路由处理。
但我不能直接访问像
这样的子路由这会产生 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 路由中缺少某些东西。 -
我的路由也有同样的问题,但与您的问题相关的帖子对我没有帮助。你能解释得更清楚吗?谢谢。