Giới thiệu
Một cách để xử lý việc truy xuất và hiển thị dữ liệu từ API là định tuyến người dùng đến một thành phần, sau đó trong ngOnInit
hook của thành phần đó gọi một phương thức trong một dịch vụ để lấy dữ liệu cần thiết. Trong khi lấy dữ liệu, có lẽ thành phần có thể hiển thị chỉ báo tải.
Có một cách khác để sử dụng cái được gọi là a route resolver
, cho phép bạn lấy dữ liệu trước khi điều hướng đến tuyến đường mới.
Một API có sẵn để sử dụng là Hacker News API . Hacker News là một trang web để chia sẻ các liên kết và thảo luận về chúng. API có thể được sử dụng để truy xuất các bài đăng phổ biến nhất và hiển thị thông tin về các bài đăng riêng lẻ.
Trong hướng dẫn này, bạn sẽ triển khai một trình giải quyết tuyến đường lấy dữ liệu từ Hacker News API trước khi điều hướng đến một tuyến đường hiển thị dữ liệu đã thu thập.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần:
- Node.js được cài đặt cục bộ, bạn có thể thực hiện bằng cách làm theo Cách cài đặt Node.js và Tạo môi trường phát triển cục bộ .
- Một số thông tin quen thuộc với việc thiết lập một dự án Angular .
Hướng dẫn này đã được xác minh với Node v15.3.0, npm
v6.14.9, @angular/core
v11.0.1, @angular/common
v11.0.1, @angular/router
v11.0.1 và rxjs
v6.6.0.
Bước 1 - Thiết lập dự án
Với mục đích của hướng dẫn này, bạn sẽ xây dựng từ một dự án Angular mặc định được tạo bằng @angular/cli
.
Điều này sẽ định cấu hình một dự án Angular mới với các kiểu được đặt thành “CSS” (trái ngược với “Sass”, Less ”hoặc“ Stylus ”), bật định tuyến và bỏ qua các bài kiểm tra.
Điều hướng đến thư mục dự án mới được tạo:
Tại thời điểm này, bạn có một dự án Angular mới với @angular/router
.
Bước 2 - Xây dựng trình phân giải
Hãy bắt đầu bằng cách triển khai trình phân giải trả về một chuỗi sau độ trễ 2 giây. Bằng chứng khái niệm nhỏ này có thể giúp khám phá các nguyên tắc cơ bản của các tuyến dây dẫn có thể được áp dụng cho các dự án lớn hơn.
Đầu tiên, hãy tạo một lớp riêng cho trình phân giải trong một tệp của chính nó:
Điều này sẽ sử dụng @angular/cli
để tạo một trình phân giải có tên news
:
Việc triển khai Resolve
giao diện của bộ định tuyến Angular yêu cầu lớp phải có một resolve
phương thức. Bất cứ thứ gì được trả về từ phương thức đó sẽ là dữ liệu đã được giải quyết.
Mã này sẽ trả về một mã có thể quan sát được bao bọc một chuỗi sau thời gian trễ 2 giây.
Bước 3 - Định cấu hình các tuyến đường
Để trải nghiệm hai tuyến đường khác nhau, bạn sẽ cần hai thành phần mới. home
sẽ là trang đích. Và top
sẽ giới thiệu các bài đăng hàng đầu từ Hacker News API.
Đầu tiên, sử dụng @angular/cli
để tạo một home
thành phần:
Sau đó, sử dụng @angular/cli
để tạo một top
thành phần:
Bây giờ bạn có thể thiết lập mô-đun định tuyến để bao gồm trình phân giải.
Lưu ý cách trình phân giải được cung cấp giống như một dịch vụ và sau đó bạn bao gồm trình phân giải với định nghĩa tuyến đường. Tại đây, dữ liệu đã phân giải sẽ có sẵn dưới message
khóa.
Bước 4 - Truy cập dữ liệu đã giải quyết trong thành phần
Trong thành phần, bạn có thể truy cập dữ liệu được giải quyết bằng cách sử dụng data
tài sản của ActivatedRoute
's snapshot
đối tượng:
Bây giờ, trong thành phần, bạn có thể truy cập Route!
thông báo như sau:
Tại thời điểm này, bạn có thể biên dịch ứng dụng của mình:
Và truy cập localhost:4200/top
trong trình duyệt web.
OutputThe message: Route!
Bạn sẽ quan sát thấy khi điều hướng đến top
tuyến đường hiện có độ trễ 2 giây vì dữ liệu được giải quyết trước.
Bước 5 - Giải quyết dữ liệu từ API
Hãy làm cho mọi thứ trở nên giống thực hơn bằng cách thực sự lấy một số dữ liệu từ một API. Tại đây, bạn sẽ tạo một dịch vụ lấy dữ liệu từ Hacker News API.
Bạn sẽ cần HttpClient để yêu cầu điểm cuối.
Đầu tiên, hãy thêm HttpClientModule
vào app.module.ts
:
Sau đó, tạo một dịch vụ mới:
Điều này sẽ sử dụng @angular/cli
để tạo một dịch vụ có tên news
:
Và bây giờ bạn có thể thay thế mã chuỗi NewsResolver
bằng NewsService
:
Tại thời điểm này, nếu bạn nhìn vào top
lộ trình trong trình duyệt, bạn sẽ thấy một danh sách các con số đại diện cho id
các bài đăng hàng đầu trên Hacker News.
Bước 6 - Truy cập các thông số tuyến đường
Bạn có thể có quyền truy cập vào các tham số tuyến đường hiện tại trong trình phân giải của mình bằng cách sử dụng ActivatedRouteSnapshot
đối tượng.
Đây là một ví dụ trong đó bạn sẽ sử dụng một trình phân giải để có quyền truy cập vào thông id
số của tuyến đường hiện tại.
Đầu tiên, sử dụng @angular/cli
để tạo một trình phân giải có tên post
:
Sau đó, sửa đổi post.resolver.ts
để sử dụng ActivatedRouteSnapshot
:
Tiếp theo, thêm một getPost
phương thức vào NewsService
:
Và thêm PostResolver
và post/:id
tuyến đường đến app-routing.module.ts
:
Tiếp theo, tạo mới PostComponent
:
Sau đó, sửa đổi post.component.ts
để sử dụng dữ liệu ảnh chụp nhanh:
Và sửa đổi post.component.html
để hiển thị title
:
Bây giờ nếu người dùng truy cập http://localhost:4200/post/15392112
, dữ liệu cho id bài đăng 15392112
sẽ được giải quyết.
Bước 7 - Xử lý lỗi
Trong trường hợp có lỗi khi tìm nạp dữ liệu, bạn có thể bắt và xử lý lỗi trong trình phân giải bằng cách sử dụng toán tử bắt của RxJS . Ví dụ như thế này:
Hoặc bạn có thể trả về một EMPTY
tệp có thể quan sát được và đưa người dùng trở lại đường dẫn gốc:
Hai cách tiếp cận này sẽ dẫn đến trải nghiệm người dùng tốt hơn nếu có lỗi khi truy xuất dữ liệu từ API.
Phần kết luận
Trong hướng dẫn này, bạn đã triển khai một trình giải quyết tuyến đường lấy dữ liệu từ Hacker News API trước khi điều hướng đến một tuyến đường hiển thị dữ liệu đã thu thập. Điều này đạt được bằng cách sử dụng @angular/router
, @angular/common/http
và rxjs
.
0 nhận xét:
Post a Comment