Aurelia 中的路由问题与路由参数
Routing issue in Aurelia with route params
使用 Aurelia CLI 0.32,我有这个路由配置
public configureRouter(config: RouterConfiguration, router: Router): void {
this.router = router;
config.options.pushState = true;
config.options.root = '';
config.map([
{ route: ['', 'home'], name: "home", moduleId: 'home/index', title: 'Main page' },
{ route: 'editroute/:id', name: "editroute", moduleId: 'edit/index', title: 'Edit Page' }
]);
config.fallbackRoute('');
}
使用 link
<a route-href="route: editroute; params.bind: {id:item.id}">Edit ${item.name}</a>
我可以导航到路线。但是在浏览器中刷新页面会导致错误,如屏幕截图所示
在asp.net上是运行并且有重写规则支持pushstate
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{URL}" matchType="Pattern" negate="true" pattern=".*\/((api|signalr)\/.*|loaderio.*)" ignoreCase="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
我做错了什么?
谢谢
编辑:此错误仅发生在具有路由参数的路由上
第一步是尝试将 scripts/vendor-bundle.js
的相对路径更改为绝对 /scripts/vendor-bundle.js
如果它不能解决您的问题 - 它至少会阻止下载每条路线的所有脚本 (-:
规则有误。由于您的 html 要求具有相对路径的脚本 - 服务器在 "the directory" 中查找并且没有文件。所以它放弃了你的index.html(或任何在网站根目录下提供的服务)而不是脚本。
为了在深度 URL 时服务器端页面刷新正常工作,您必须修改 aurelia_project/aurelia.json
以在捆绑模块时使用绝对路径:
{
"build": {
"targets": [
{
// ...
"baseUrl": "/scripts",
"useAbsolutePath": true
}
],
// etc...
另一个可能不需要更改但包含相同属性的地方是:
{
"platform": {
// ...
"baseUrl": "/scripts",
"useAbsolutePath": true
}
此外,请务必测试 Internet Explorer 11,因为它比其他浏览器更挑剔。
当然,如前所述,您还必须确保对其他资源也使用绝对路径(/scripts/vendor-bundle.js
、字体路径等)
使用 Aurelia CLI 0.32,我有这个路由配置
public configureRouter(config: RouterConfiguration, router: Router): void {
this.router = router;
config.options.pushState = true;
config.options.root = '';
config.map([
{ route: ['', 'home'], name: "home", moduleId: 'home/index', title: 'Main page' },
{ route: 'editroute/:id', name: "editroute", moduleId: 'edit/index', title: 'Edit Page' }
]);
config.fallbackRoute('');
}
使用 link
<a route-href="route: editroute; params.bind: {id:item.id}">Edit ${item.name}</a>
我可以导航到路线。但是在浏览器中刷新页面会导致错误,如屏幕截图所示
在asp.net上是运行并且有重写规则支持pushstate
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{URL}" matchType="Pattern" negate="true" pattern=".*\/((api|signalr)\/.*|loaderio.*)" ignoreCase="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
我做错了什么?
谢谢
编辑:此错误仅发生在具有路由参数的路由上
第一步是尝试将 scripts/vendor-bundle.js
的相对路径更改为绝对 /scripts/vendor-bundle.js
如果它不能解决您的问题 - 它至少会阻止下载每条路线的所有脚本 (-:
规则有误。由于您的 html 要求具有相对路径的脚本 - 服务器在 "the directory" 中查找并且没有文件。所以它放弃了你的index.html(或任何在网站根目录下提供的服务)而不是脚本。
为了在深度 URL 时服务器端页面刷新正常工作,您必须修改 aurelia_project/aurelia.json
以在捆绑模块时使用绝对路径:
{
"build": {
"targets": [
{
// ...
"baseUrl": "/scripts",
"useAbsolutePath": true
}
],
// etc...
另一个可能不需要更改但包含相同属性的地方是:
{
"platform": {
// ...
"baseUrl": "/scripts",
"useAbsolutePath": true
}
此外,请务必测试 Internet Explorer 11,因为它比其他浏览器更挑剔。
当然,如前所述,您还必须确保对其他资源也使用绝对路径(/scripts/vendor-bundle.js
、字体路径等)