简介
在ANGLING中,RouterLink
是导航到不同的ROUTE_DECLARATABLY_的指令。Router.Navigate
和Router.NavigateByURL
是Router
类在组件类中导航_强制的两个方法。
我们来了解一下RouterLink
、Router.Navigate
和Router.NavigateByURL
的使用方法。
使用RouterLink
HTML中的典型链接如下所示:
1<a href="/example">
2 Example HTML link.
3</a>
此示例链接将把用户定向到/Example
页面。
但是,单页面应用程序(SPA)没有要链接到的不同页面。相反,它有不同的_view_显示给用户。要允许用户导航和更改视图,您需要使用RouterLink
指令,而不是href
:
1<a routerLink="/users/sammy">
2 Link that uses a string.
3</a>
这个RouterLink
示例将把用户定向到/USERS/sammy
处的组件。
不同的URL段也可以在数组中传递,如下所示:
1<a [routerLink]="['/', 'users', 'sammy']">
2 Link that uses an array.
3</a>
这两个示例的格式不同,但将定向到/USERS/sammy
中的同一组件。
相对路径
您可以使用../
在导航中转到更高级别,如下所示:
1<a [routerLink]="['../', 'posts', 'sammy']">
2 Link that goes up a level.
3</a>
在该示例中,如果用户位于/USERS/sammy
,则导航将变为/post/sammy
。
可以在第一个URL段前面加上./
、../
或不加前导斜杠。
参数说明
您可以使用URL段列表中的对象将参数传递给导航:
1<a [routerLink]="['/', 'users', {display: 'verbose'}, 'sammy']">
2 Link with parameter.
3</a>
在该示例中,Router
将导航到/USERS;DISPLAY=Verbose/sammy
。
命名Outlets
您可以使用如下内容告诉Router‘在命名的
outlet`中放置什么内容:
1<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'] } }]">
2 Link with a side outlet.
3</a>
在该示例中,sammy
段将被放置在名为side
的outlet
中。
还可以用如下内容来告诉Router‘在多个名为
Outlet’中放置什么:
1<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'], footer: ['sharks'] } }]">
2 Link with a side and footer outlets.
3</a>
在本例中,sammy
段将放置在名为side
的outlet
中,Sharks
段将放置在名为footer
的outlet
中。
使用路由器
在ANGLE的Router
类中,有两种方法可用于在组件类中进行强制导航:Router.Navigate
和Router.NavigateByUrl
。这两种方法都会返回一个Promise,如果导航成功,则解析为true
;如果没有导航,则返回null
;如果导航失败,则返回False
;如果导航出错,则完全拒绝。
要使用这两种方法中的任何一种,首先要确保Router
类被注入到组件类中。
首先,将Router
导入到组件类中:
1import { Component } from '@angular/core';
2import { Router } from '@angular/router';
然后,在依赖项中添加Router
:
1@Component({
2 // ...
3})
4export class AppComponent {
5
6 constructor(private router: Router) {
7 // ...
8 }
9
10 // ...
11}
现在,您可以使用Router.Navigate
或Router.NavigateByUrl
。
路由器.导航
将URL段数组传递给Router.Navigate
。
以下是使用Router.Navigate
方法的基本示例:
1goPlaces() {
2 this.router.navigate(['/', 'users']);
3}
下面是一个演示Router.Navigate
是_thable_的示例:
1goPlaces() {
2 this.router.navigate(['/', 'users'])
3 .then(nav => {
4 console.log(nav); // true if navigation is successful
5 }, err => {
6 console.log(err) // when there's an error
7 });
8}
如果本例中Router.Navigate
成功,则显示true
。如果本例中Router.Navigate
不成功,则会显示错误。
Router.NavigateByUrl
Router.NavigateByUrl
类似于Router.Navigate
,不同之处在于传入的是字符串而不是URL段。导航必须是绝对的,并且以/
开头。
下面是一个使用Router.navigateByUrl
方法的基本示例:
1goPlaces() {
2 this.router.navigateByUrl('/users;display=verbose/sammy');
3}
在本例中,Router.NavigateByUrl
将导航到/USERS;DISPLAY=Verbose/sammy
。
结论
在本文中,您了解了角度应用程序中的导航。您已经了解了RouterLink
、Router.Navigate
和Router.NavigateByURL
。
如果您想了解更多有关ANGLE的信息,请查看我们的ANGLE主题页面以获取练习和编程项目。