我试图在当前页面上使用不同的参数路由,但一直没有成功。 我有一个触发器为下拉框:
this.router.navigate(['page', selectedId]);
网址在变,但只有这个改变。
如何使用不同的参数路由到同一页?
我试图在当前页面上使用不同的参数路由,但一直没有成功。 我有一个触发器为下拉框:
this.router.navigate(['page', selectedId]);
网址在变,但只有这个改变。
如何使用不同的参数路由到同一页?
页面不会刷新,因为这就是路由器
的工作方式...在不刷新页面的情况下!
您必须订阅路由参数以检测它们的更改,然后根据该信息执行所需操作。
因此,将ActivatedRoute
注入到组件中,并像这样订阅参数:
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.params.subscribe(params => {
// PARAMS CHANGED .. TO SOMETHING REALLY COOL HERE ..
// for example extract the id..
let id = +params['id']; // (+) converts string 'id' to a number
});
}
Observable
而不是number
,并且也可以检测这些组件中的更改。 - slaesh好的,在阅读了所有答案,特别是@mxii的答案后(非常感谢),我理解:
很好的课程,谢谢!
this.router.navigateByUrl('page_url/' + your_id);
这样做可以成功更改您的参数。
但它只会更改您的URL。如果您真的想加载一些方法,那么您必须手动调用它们。
import { Router } from '@angular/router';
constructor(private router: Router) {
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
我找到的最简单的方法是订阅路由器,然后重新加载页面:
this.router.navigate(['page', selectedId]).then(page => { window.location.reload(); });
shouldReuseRoute
是一个更高效的解决方案。 - nesterenes
navigate(['../', selectedId], { relativeTo: route })
,其中route
是ActivatedRoute
。该方法可帮助您导航到当前路由的父级并指定一个新的子级路由selectedId
。 - Paul Samsothathis.router.url.match('/firstroute/')
),我将重定向到第二个镜像路由(this.router.navigate('/secondroute', params)
),否则我将重定向到第一个镜像路由。是的,我知道,这是一种相当丑陋的解决方法……它可以工作,但是方式很丑陋 :) - Deadpool