Angular router.navigate()delta

Est*_*ask 13 angular2-routing angular

如手册中所述,router.navigate接受delta,但是手册但是不够具体:

根据提供的命令数组和起点进行导航.如果没有提供起始路线,则导航是绝对的.

...

与navigateByUrl相反,navigation始终采用应用于当前URL的增量.

它只是应用相对URL还是更复杂的东西?那么在绝对导航的情况下,它指的是什么样的三角洲呢?

Bor*_*rov 7

它只是应用相对URL还是更复杂的东西?

它是根据您通过commands参数提供的部分构建的相对URL,并考虑了您传入的其他参数extras(NavigationExtras对象).

例如,您可以使用relativeTo从活动路径或根路径导航.您可以为导航到的URL(queryParams以及fragment其他内容)设置查询参数或片段,也可以保留当前URL中存在的查询参数(queryParamsHandling在附加内容中).

等等,所以一般来说,它实际上比我们动态构建URL时通过URL导航更复杂.

那么在绝对导航的情况下,它指的是什么样的三角洲呢?

对于相对和绝对导航,它是相同的 - 增量是commands应用于当前路径(相对)的更改集()或将应用程序转移到新状态的根路径(绝对)(仅提供新URL通过navigateByUrl).

在简单的情况下,如果您执行类似的操作this.router.navigate(['/heroes'])实际上与使用它没有什么不同navigateByUrl,但请考虑这些示例(请参阅实际转换的createUrlTreecommandsextras最终的URL):

// create /team/33/(user/11//right:chat)
router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);

// remove the right secondary node
router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);
Run Code Online (Sandbox Code Playgroud)

因此,即使对于绝对导航,该navigate方法也提供了一组动态构建URL的附加工具.你可以这样做navigateByUrl,但你可能会用字符串解析/连接/做其他操作(或者开发类似于什么navigatecreateUrlTree提供的自己的工具).