广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买
本篇文章给大家对比一下Angular路由中navigateByUrl和navigate,看看他们的不同点和共同点,希望对大家有所帮助!
angular navigateByUrl vs navigate 路由跳转import { Router, ActivatedRoute } from '@angular/router';export class xxx{ constructor(private router: Router, private route: ActivatedRoute){} }登录后复制
【相关教程推荐:《angular教程》】
1. 不同点1.1 navigateByUrl()navigateByUrl(url: string | UrlTree, extras: NavigationExtras = { skipLocationChange: false }): Promise<boolean>登录后复制
第一个参数必须是==绝对路径==的字符串。
this.router.navigateByUrl('/home');登录后复制
他俩接收的第一个参数不同,第二个参数相同。
1.2 navigate()navigate(commands: any[], extras: NavigationExtras = { skipLocationChange: false }): Promise<boolean>登录后复制
第一个参数是一个数组
this.router.navigate(['home', 'demo'])登录后复制
那么解析的路由就是localhost:4200/home/demo
。
可以相对当前路由进行导航
传入一个relativeTo
参数,即可相对传入的路由进行跳转。如当前在localhost:4200/home
,
this.router.navigate(['demo'], {relativeTo: this.route})登录后复制
跳转后的地址为localhost:4200/home/demo
。
但如果'demo'
写成'/demo'
传入的路由就不起作用了,会以根路由进行导航。如果不传入也是默认以根路由(localhost:4200)进行导航。
interface NavigationExtras { relativeTo?: ActivatedRoute | null queryParams?: Params | null fragment?: string preserveQueryParams?: boolean queryParamsHandling?: QueryParamsHandling | null preserveFragment?: boolean skipLocationChange?: boolean replaceUrl?: boolean state?: {...}}登录后复制2.1 传递参数方式一样
通过queryParams传参以 navigate 举例
此种传参方式会把参数拼接在url上,如localhost:4200/demo?id=1
A组件传递参数
this.router.navigate(['demo'], {queryParams: {id: 1} , relativeTo: this.route})登录后复制
B组件接收参数
若是通过/user/:id
方式传递过来用 activatedRoute.params
import { ActivatedRoute } from '@angular/router';constructor(private activatedRoute: ActivatedRoute) { this.activatedRoute.params.subscribe((param) => { console.log('组件里面的param', param);// {id :1} });}登录后复制若是通过
/user?id=1
方式传递用activatedRoute.queryParams
import { ActivatedRoute } from '@angular/router';constructor(private activatedRoute: ActivatedRoute) { this.activatedRoute.queryParams.subscribe((param) => { console.log('组件里面的queryParams', param); // {id :1} });}登录后复制通过state传参
此种方式会把数据存在浏览器的历史记录中,state必须是一个对象,在子路由中使用getCurrentNavigation取出。
A组件传递参数
navigateByUrl(url: string | UrlTree, extras: NavigationExtras = { skipLocationChange: false }): Promise<boolean>0登录后复制
B组件接收参数
navigateByUrl(url: string | UrlTree, extras: NavigationExtras = { skipLocationChange: false }): Promise<boolean>1登录后复制2.2 均有回调
navigateByUrl(url: string | UrlTree, extras: NavigationExtras = { skipLocationChange: false }): Promise<boolean>2登录后复制
更多用法更新于 github:
https://github.com/deepthan/blog-angular
更多编程相关知识,请访问:编程入门!!
以上就是浅析Angular路由中navigateByUrl和navigate的区别和共同点的详细内容,更多请关注9543建站博客其它相关文章!
发表评论