Angular router: Chuyển route thì sử dụng RouterLink, Navigate hay NavigateUrl
Angular router cho phép chúng ta chuyển từ một view này đến một view khác bằng cách thực hiện các tác vụ tương ứng
Trong Angular router, chúng ta biết đến cách dễ dàng để chuyển giữa các route đó là sử dụng routerLink directive.
Trong bài viết này chúng ta cùng xem qua 1 số ví dụ về cách chuyển route dùng routerLink , cũng như cách chuyển route trong component class.
RouterLink
Trường hợp đơn giản dùng routerLink directive:
<a routerLink="/post-list/post1">Post 1</a>
Cách khác bạn có thể truyền vào trong routerLink 1 array:
<a routerLink="['/', 'posts-list', 'post1']">Post 1</a>
Or
<a routerLink="['/', 'posts-list', post.id, 'view']">Post 1</a>
Bạn có thể dùng đường dẫn tương đối để chuyển về đường dẫn cấp cao hơn:
<a routerLink="['../', blogs-list', 'blog1']">Blog 1</a>
Trong ví dụ trên, nếu bạn đang đứng ở /post-list/post1 thì khi thực hiện câu lệnh trên nó sẽ chuyển bạn đến /blogs-list/blog1. Bạn cũng có thể truyền params vào trong đường dẫn:
<a routerLink="['/', blogs-list', {page: 1},'blog1']">Blog 1</a>
Kết quả thu được trong ví dụ trên sẽ là /blogs-list;page=1/blog1
Named Outlets
<router-outlet></router-outlet>
<router-outlet name='left'></router-outlet>
<router-outlet name='right'></router-outlet>
Routeroutlet được hiểu đơn giản như một nơi giữ chỗ cho các thông tin được hiển thị khi gọi đến route nào đó. Chúng ta có thể lựa chọn vị trí hiển thị dữ liệu thông qua gọi tên outlet trong routerLink:
<a [routerLink]="['/', 'posts-list', { outlets: { left: ['post1'] } }]">
Post 1
</a>
Navigating Imperatively
Trong Angular Router có 2 phương thức có sẵn giúp ta điều hướng sử dụng trong component class: Router.navigate và Router.navigateByUrl. Cả 2 phương thức đều cho kết quả trả về là 1 promise.
navigate(commands: any[], extras?: NavigationExtras): Promise<boolean>;
navigateByUrl(url: string | UrlTree, extras?: NavigationExtras): Promise<boolean>;
Bạn có thể truyền một array các đoạn url vào Router.navigate hoặc 1 string vào Router.navigateByUrl, kết quả bạn thu được cũng sẽ tương tự với việc dùng routerLink Để sử dụng 2 phương thức đó, bạn sẽ phải inject Router class vào trong component của bạn :
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
// ...
})
export class AppComponent {
constructor(private router: Router) {}
// ...
}
Router.navigate
public nextToPostDetail(url, id) {
this.router.navigate([url, id]).then( (e) => {
if (e) {
console.log("Navigation is successful!");
} else {
console.log("Navigation has failed!");
}
});
}
Router.navigateByUrl
public nextToPostDetail2(url, id) {
var myurl = `${url}/${id}`;
this.router.navigateByUrl(myurl).then(e => {
if (e) {
console.log("Navigation is successful!");
} else {
console.log("Navigation has failed!");
}
});
}
Kết luận
Ở bài viết này mình đã cùng các bạn đi qua cách chuyển route sử dụng routerLink directive trong HTML Template hay tình huống bạn muốn chuyển route trong component class.
Bạn đã đọc hết bài viết này của mình rồi đấy.
Xin cám ơn !!!
Bạn có thể đọc thêm về các phương thức trong Router class tại https://angular.io/api/router/Router
All Rights Reserved