Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在不重新初始化与路由关联的组件的情况下向我的URL添加参数?_Angular - Fatal编程技术网

Angular 如何在不重新初始化与路由关联的组件的情况下向我的URL添加参数?

Angular 如何在不重新初始化与路由关联的组件的情况下向我的URL添加参数?,angular,Angular,我的路由组件中有两条与问题相关的路由: { path: 'curation/:documentId/drug-approval/:findingId', component: DrugApprovalComponent }, { path: 'curation/:documentId/drug-approval', component: DrugApprovalComponent } 最初,用户进入第二条路线,填写表单并点击save,此时向后端发出请求,我得到f

我的路由组件中有两条与问题相关的路由:

{
    path: 'curation/:documentId/drug-approval/:findingId',
    component: DrugApprovalComponent
}, {
    path: 'curation/:documentId/drug-approval',
    component: DrugApprovalComponent
}
最初,用户进入第二条路线,填写表单并点击save,此时向后端发出请求,我得到findingId

我想将查找id添加到URL中,这样当用户刷新页面时,他们仍然可以得到相同的表单

只需浏览路径即可重置我的表单,因为该组件已重新调整为斜体:

this.router.navigate[data.findingId],{relativeTo:this.route}; 我尝试使用{skipLocationChange:true},但这只会跳过添加新的历史状态,我的组件是reinit

我还尝试了类似问题中建议的location API,但这对我来说似乎有点“黑客”,而且createUrlTree函数没有考虑我的根基url,我不想硬编码,因为它基于构建参数

this.router.createUrlTree [ “/策展”, 这个.documentId, "药品审批",, data.findingId ] .toString//此项不包含基本url 我还尝试使用RouterUseStrategy,但我显然遗漏了一些东西,因为这不起作用,我已经将其作为提供者添加到我的主模块中

param-change-route-reuse-strategy.ts

导出类paramChangeRouterUseStrategy实现RouterUseStrategy{ 应该分离{ 返回false; } 应该附加{ 返回false; } 应重用未来:ActivatedRouteSnapshot,curr:ActivatedRouteSnapshot:布尔值{ 如果future.firstChild&&curr.firstChild{ 如果future.firstChild.component{ if components forreuse.includeFuture.firstChild.component['name']{ 如果future.firstChild.routeConfig.path.includeCurr.firstChild.routeConfig.path{ 返回true; } } } } 返回false; } 存储{} 取回{ 返回未定义; } } 这就是我现在的处境。我想我也可以使用location API,但我确信有一种角度的方法,如果可能的话,我想使用它。

当您尝试使用Router.navigate时,您可以调用路由组件中的组件集

您可以做以下几件事:

[不推荐]。将组件的状态保存到服务中,或者其他任何内容,并且,如果url没有更改,请立即恢复该状态

[推荐]。只需更改URL,无需触发新组件呈现:

您应该尝试以下方法:

从“@angular/common”导入{Location}; 从'@angular/router'导入{ActivatedRoute}; @组件{…} 类WhateverComponent{ 建造师 私人场所:场所, 私有激活路由:激活路由, {} 多辛格达塔{ const url=this .路由器 .createUrlTree[data.findingId],{relativeTo:this.activatedRoute} .托斯特林; this.location.goul;//将浏览器的URL更改为给定URL的规范化版本,并将新项目推送到平台的历史记录中。 //或 //this.location.replaceStateurl;//将浏览器的URL更改为给定URL的规范化版本,并替换平台历史堆栈上的顶部项。 } } 参考资料:


您是否尝试添加skipLocationChange以导航选项?不确定它是否只跳过添加一个新的历史状态,或者它是否也跳过重新初始化组件。它只跳过添加新的历史状态。我将编辑我的答案以澄清这一点。这是不是因为我希望能够使用路由器而采用的角度。以某种方式、形状或形式导航?此外,您提出的解决方案没有考虑到我的根路径基URL。您可以将其视为一种角度的方式。您没有弄乱DOM,没有使用窗口对象,没有直接使用任何webclient API。我不知道路由器中有任何方法不会调用组件的onInit