【问题标题】:routerLink absolute urlrouterLink 绝对网址
【发布时间】:2016-10-04 09:33:44
【问题描述】:

来自angular docs

路由器链接指令始终将提供的输入视为增量 到当前网址。

例如,如果当前 url 是/user/(box//aux:team)。然后 以下链接<a [routerLink]="['/user/jim']">Jim</a> 将生成 链接/user/(jim//aux:team)

那么如何创建指向/user/jim 的链接?

我试过 ['/user/jim', { outlets: { aux: null }}] 但这不起作用。
即使它有效,它也不会是最佳解决方案。我宁愿寻找一种导航到绝对网址的方法,而不是取消 possibles 网点。

编辑:

在同一主题上,我有一个指向根的链接:routerLink="/",它就是这样做的,它重定向到我的应用程序的根,没有任何出口,如绝对链接。这里有趣的是我并不特别希望该特定链接的这种行为,保持任何出口路线都很好......

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    截至 2018 年 8 月,Angular docs 说:

    • 如果第一段以 / 开头,路由器将从应用程序的根目录查找路由。
    • 如果第一段以 ./ 开头,或不以斜杠开头,路由器将改为查找当前段的子段 激活的路线。
    • 如果第一段以 ../ 开头,路由器将上一级。

    【讨论】:

      【解决方案2】:

      你可以使用相对路径:

      <a [routerLink]="['./']"
      

      将重定向到您的上级父母 (/user/jim)

      <a [routerLink]="['']"
      <a [routerLink]="['/']"
      

      将重定向到'/'

      【讨论】:

      • ./ 不会重定向到 ../ 的父级,但这仍然会保留辅助路由并重定向到 /user/(jim//aux:team)
      • 我必须深入一点../../../../
      【解决方案3】:

      我想最简单的方法是

      <a [routerLink]=['/path/you/want', varibleToBeUsed]></a>
      

      例子

      let link.path = 'something';
      
      <a [routerLink]="['/',link.path]">test</a>
      <!--
      www.test.com/something
      -->
      
      
      <a [routerLink]="['/user/jim',link.path]">test2</a>
      <!-- this will append to the base path 
      i.e. www.test.com/user/jim/something
      -->
      
      
      
      <a [routerLink]="['jim',link.path]">test3</a>  
      <!-- this will append to current url path 
      i.e. if your current path is www.test.com/login then it will append as
      www.test.com/login/jim/something
      -->
      

      【讨论】:

      • 我试过了,但它总是从根目录创建链接。我希望将结果作为您的第三个选择。我一直在寻找解决方案,但即使在文档中,它也写得一样,但不起作用。
      • 你有代码吗? stackblitz.com例子
      【解决方案4】:

      截至 2020 年 5 月,对于可以与内置 [routerLink] 一起使用的初始问题没有有效的答案,所以它来了。

      在您的问题中,['/user/jim', { outlets: { aux: null }}] 的想法很好,但您必须明确指定主要出口:

      <a [routerLink]="['/', { outlets: { primary: 'user/jim', aux: null } }]">
        This will be a link to '/user/jim', without any route in the aux path
      </a>
      

      (据我所知,目前没有办法在不取消可能的出口的情况下将[routerLink] 与绝对网址一起使用。)

      您可以对 EDIT 遵循相同的逻辑。如果您不更改辅助插座,但将主插座显式设置为空(根),您可以导航到根并保留当前插座:

      [routerLink]="['/', { outlets: { primary: '' } }]"
      

      【讨论】:

        【解决方案5】:

        HTML:

         <a id="id" class="link" (click)="goToDetail(value)">{{ value }}</a>
        

        TS:

        goToDetail(value) {
          this.router.navigate([this.urlDetalle + value]);
        }
        

        this.urlDetalle 是绝对路径,我连接该值以查看任何实体的详细信息

        效果很好!!

        【讨论】:

          【解决方案6】:

          解决您的问题的方法可能是在您的 html 元素上放置一个点击事件,然后您可以将您的 url 传递到事件处理程序并使用从“@angular/router”导入的“路由器”重新路由:

          <a (click)="reRoute(urlToRoute)"></a>
          

          然后在组件的 .ts 文件中:

               import { Router} from '@angular/router';
          ..
              constructor(private router: Router,
                  ) { }
          ..
          
              reroute(url) {
           this.router.navigate([url])
          }
          

          希望这能解决您的问题!

          【讨论】:

          • 这并不能解决绝对 URL 的问题。
          • 你能说得更具体些吗?这不能解决什么问题。
          • 当然。您基本上只是在编写路由器的实现以及如何导航。然而,线程启动器要求提供一种导航到绝对 URL 的方法。所以它的内容实际上是 URL 参数。通常对于 url,你有类似“../user”的东西。但问题就在这里:如何导航到绝对网址而不是相对网址?
          • 我的意思是,当您使用 [routerLink] 指令时,它总是将输入 url 附加到您当前使用的任何 url。然而,使用我上面写的函数,它总是会路由到绝对 url,所以假设你当前在 url /some/url 上,并且你想路由到 /someOther/url 如果您输入 /someOther/urlrouterLink 它会将您路由到 /some/url/someOther/url 但与上述函数,您将被路由到您作为输入提供的绝对 url。
          【解决方案7】:
          <a [routerLink]="['./user1', id]">User1 detail</a> // this is child of the current activated route
          
          <a [routerLink]="['/user2']">User2</a> // this is absolute new router
          

          【讨论】:

          • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
          猜你喜欢
          • 2010-10-28
          • 2019-06-25
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多