2017-07-20 54 views
13

如手册中所述,router.navigate接受一个三角形,但手工但不够具体上是:角router.navigate()增量

导航基于所提供的命令的数组和一个起动上点。如果没有提供启动路线,则导航是绝对的。

...

在相反navigateByUrl,导航总是需要被施加到当前URL的增量。

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

+0

什么是三角洲? 我刚刚在angular docs中找到了'delta'的一个地方,它是RouterLink API Doc页面的一部分:路由器链接指令始终将提供的输入视为对当前url的增量。 >例如,如果当前网址是/ user /(box // aux:team)。 >然后下面的链接Jim将生成link/user /(jim // aux:team)。 请参阅createUrlTree以获取更多信息。 ''' – Hayden

回答

7

是否只是采用相对URL或更复杂的东西navigateByUrl?

距离您通过commands PARAM提供,并考虑到你在extras(在NavigationExtras object)其他参数传递的内置件相对URL。

例如,您可以使用relativeTo从活动路线或根路线导航。 您可以为导航到的URL(queryParamsfragment以附加形式)设置查询参数或片段,也可以保留当前url中出现的查询参数(queryParamsHandling)。

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

在绝对导航的情况下,它指的是什么类型的delta?

它是相同的用于相对和绝对导航 - 增量是一组变化的(commands)应用到当前路线(相对)或根路径(绝对)到应用程序转移到新的状态(而不是通过navigateByUrl提供新的URL)。

在简单情况下,如果你这样做this.router.navigate(['/heroes'])它实际上是不使用navigateByUrl很大的不同,但考虑到这些例子(见这实际上转换commandsextras到最终URL的createUrlTree):

// 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}}]); 

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

2

在相对模式下,增量应用于当前路线。它本身要求使用此代码

/** 
    * Navigate based on the provided array of commands and a starting point. 
    * If no starting route is provided, the navigation is absolute. 
    * 
    * Returns a promise that: 
    * - resolves to 'true' when navigation succeeds, 
    * - resolves to 'false' when navigation fails, 
    * - is rejected when an error happens. 
    * 
    * ### Usage 
    * 
    * ``` 
    * router.navigate(['team', 33, 'user', 11], {relativeTo: route}); 
    * 
    * // Navigate without updating the URL 
    * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true}); 
    * ``` 
    * 
    * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current 
    * URL. 
    */ 
    navigate(commands: any[], extras: NavigationExtras = {skipLocationChange: false}): 
     Promise<boolean> { 
    validateCommands(commands); 
    return this.navigateByUrl(this.createUrlTree(commands, extras), extras); 
    } 

许多例子都包含在源代码 https://github.com/angular/angular/blob/master/packages/router/src/router.ts

+0

问题是*它只是应用相对URL或更复杂的东西?在绝对导航的情况下,它指的是什么样的三角洲呢?现在还不清楚这个三角洲的计算是什么和什么。如果是相对路径,他们可能会说'相对路径'。我不会从官方文档中很容易地得出一些赏金。 – estus