angular - 带隐藏路径的路由
问题描述
我有这个基本路线:
const appRoutes: Routes = [
{
path: 'login',
component: LoginComponent
},
{
path: '',
component: WidgetComponent
},
{
path: 'P3',
component: DashboardComponent
},
{
path: 'NN',
component: DashboardComponent
},
{
path: '**',
redirectTo: ''
}
];
它工作得很好。当我导航到.../p3
它时,加载我的组件。
现在,加载的 url 不仅仅是上面的这个。但是这样的事情:
localhost:4200/P3?p1=hello&p2=world
但它仍然可以在serve
.
当我构建应用程序并发布它时,我遇到了这个问题:通过直接导航到localhost:4200/P3?p1=hello&p2=world
服务器响应是 a This page cannot be found on the server
,我设法理解这就是P3
问题所在。所以我HashLocationStrategy
在我的模块中添加了:
{ provide: LocationStrategy, useClass: HashLocationStrategy }
,
所以现在我的网址是这样的:
<server>/#/P3?p1=hello&p2=world
这解决了我的问题。
我的问题是:有没有更好的方法来做到这一点?我在想,是否可以只隐藏P3
在网址中?我在文档中看到
skipLocationChange: true
要设置为路线,NavigationExtras
但它并不让我满意。
有人有想法吗?
解决方案
PathLocationStrategy
最容易接受的默认定位策略。这是default
strategy
Angular 中的,并利用了新的HTML5
API 调用pushstate
(来自 HTML5 历史 API)。添加#
到 url 中会产生一点噪音。所以避免HashLocationStrategy
。
如果您对此有疑问,那么您可能没有添加基本 href。只需检查head
您的部分index.html
<base href="/app"/>
推荐阅读
- ruby-on-rails - 未找到 UsersController#create 的模板,渲染头:no_content 已完成 204 No Content in 3568ms (ActiveRecord: 46.7ms)
- flutter - 行中的空格文本,但仅基于一个子小部件
- apache - Apache:在里面使用 %{DOCUMENT_ROOT}
部分 - php - 更新mysql表中的第二个重复值?
- mysql - MySQL - ORDER BY 多个单词,然后按字母顺序?
- django - 指定名为配置文件 S3Boto3Storage 的 aws
- swift - Swift 句柄确实选择了同一位置的多个注释
- karate - 如何获得要在钩子上使用的响应
- node.js - npx create-react-app 使用了错误的 node_modules 文件夹
- calc - 3维之间的分配