Angular路由器:使用RouterLink、Navigate或NavigateByUrl进行导航

来自菜鸟教程
跳转至:导航、​搜索

介绍

在 Angular 中,RouterLink 是用于以声明方式 导航到不同路线 的指令。 Router.navigateRouter.navigateByURLRouter 类可用于在组件类中强制导航 ' 的两种方法。

让我们探索如何使用RouterLinkRouter.navigateRouter.navigateByURL

使用路由器链接

HTML 中的典型链接如下所示:

<a href="/example">
  Example HTML link.
</a>

此示例链接会将用户引导至 /example 页面。

但是,单页应用程序 (SPA) 没有要链接到的不同页面。 相反,它有不同的 视图 显示给用户。 要允许用户导航和更改视图,您需要使用 RouterLink 指令而不是 href

<a routerLink="/users/sammy">
  Link that uses a string.
</a>

RouterLink 示例将用户引导至 /users/sammy 处的组件。

不同的 URL 段也可以像这样在数组中传递:

<a [routerLink]="['/', 'users', 'sammy']">
  Link that uses an array.
</a>

这两个示例的格式不同,但将指向 /users/sammy 处的同一组件。

相对路径

您可以使用 '../ 在导航中使用以下内容进入更高级别:

<a [routerLink]="['../', 'posts', 'sammy']">
  Link that goes up a level.
</a>

在该示例中,如果用户位于 /users/sammy,则导航将更改为 /posts/sammy

可以在第一个 URL 段前添加 ./../ 或没有前导斜杠。

参数

您可以使用 URL 段列表中的对象将参数传递给导航:

<a [routerLink]="['/', 'users', {display: 'verbose'}, 'sammy']">
  Link with parameter.
</a>

在该示例中,Router 将导航到 /users;display=verbose/sammy

命名奥特莱斯

你可以告诉 Router 在命名的 outlet 中放置什么,如下所示:

<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'] } }]">
  Link with a side outlet.
</a>

在该示例中,sammy 段将放置在名为 sideoutlet 中。

也可以告诉 Router 在多个命名的 outlet 中放置什么,如下所示:

<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'], footer: ['sharks'] } }]">
  Link with a side and footer outlets.
</a>

在此示例中,sammy 段将放置在名为 sideoutlet 中,而 sharks 段将放置在 outlet 中命名为 footer

使用路由器

Angular 的 Router 类有两种方法可以在组件类中进行命令式导航:Router.navigateRouter.navigateByUrl。 两种方法都返回一个承诺,如果导航成功,则返回 true,如果没有导航,则返回 null,如果导航失败,则返回 false,如果出现错误,则完全拒绝.

要使用任何一种方法,您首先要确保将 Router 类注入到您的组件类中。

首先,将 Router 导入到您的组件类中:

import { Component } from '@angular/core';
import { Router } from '@angular/router';

然后,将 Router 添加到依赖项:

@Component({
  // ...
})
export class AppComponent {

  constructor(private router: Router) {
    // ...
  }

  // ...
}

现在,您可以使用 Router.navigateRouter.navigateByUrl

路由器导航

您将 URL 段数组传递给 Router.navigate

这是使用 Router.navigate 方法的基本示例:

goPlaces() {
  this.router.navigate(['/', 'users']);
}

下面是一个示例,演示 Router.navigate 如何是 thenable

goPlaces() {
  this.router.navigate(['/', 'users'])
    .then(nav => {
      console.log(nav); // true if navigation is successful
    }, err => {
      console.log(err) // when there's an error
    });
}

如果本例中Router.navigate成功,则显示true。 如果在本例中 Router.navigate 不成功,则会显示错误。

Router.navigateByUrl

Router.navigateByUrlRouter.navigate 类似,只是传入的是字符串而不是 URL 段。 导航应该是绝对的,并以 / 开头。

这是使用 Router.navigateByUrl 方法的基本示例:

goPlaces() {
  this.router.navigateByUrl('/users;display=verbose/sammy');
}

在此示例中,Router.navigateByUrl 将导航到 /users;display=verbose/sammy

结论

在本文中,您了解了 Angular 应用程序中的导航。 向您介绍了 RouterLinkRouter.navigateRouter.navigateByURL

如果您想了解有关 Angular 的更多信息,请查看 我们的 Angular 主题页面 以获取练习和编程项目。