Chuyển đến nội dung chính

Get data from an API service in Angular 

1. Promises và Observables 

Promises:

    Là một đối tượng được lập trình để thao tác bất đồng bộ trong Javascript. Nó đại diện cho một giá trị mà chúng ta muốn thao tác nhưng có thể hiện tại chưa có sẵn nhưng trong tương lại nó có giá trị trong promise đó.

Một số đặc điểm của promise là:
- Chỉ trả về một giá trị duy nhất, đó có thể là object, array, number....
- Không thể cancel được request
- Được khởi tạo ngay mặc dù chưa được đăng ký, miễn là bạn khai báo một promise thì nó sẽ chạy contructor.
Promise có ba trạng thái :


  • Pending: khi khởi tạo đối tượng promise, gọi một request đến server.
  • Fulfilled: thao tác gọi đến server thành công sẽ chuyển từ pending sang fulfilled qua phương thức then() (có thể xử lý kết quả thành công trong phương thức then() ).
  • Rejected: khi request đến server bị lỗi, có thể dùng .catch() để bắt lỗi.

Observables:

    Tương tự như promise nhưng có một số ưu điểm khác. Nó như một ống dữ liệu, chúng ta có thể đẩy nhiều dữ liệu qua ống này. Nó là một tính năng của ES7, hoặc chúng ta có thể sử dụng nó như một thư viện ngoài thông qua RxJS


Một số đặc điểm của Observable là:
  • Trả về một hoặc nhiều giá trị.
  • Có thể cancel request 
  • Chỉ được khởi tạo khi có đăng ký đến observable đó (có listener)
  • Có nhiều thao tác xử lý với dữ liệu như filter, map, take, debounce...

2. Sử dụng Observables để request một api từ server và hiển thị ra 

    Đầu tiên chúng ta vào trang  mockapi.io tạo một api theo format có sẵn, có thể chọn kiểu dữ liệu theo mong muốn.
- Đặt tên cho đường dẫn api:



-Khởi tạo dữ liệu



Kết quả chúng ta có đường link api theo format Json


Tiếp đó chúng ta tiến hành khởi tạo project Angular
Đầu tiên chúng ta cần import HttpClientModule vào app.module.ts. Việc này để đăng ký http service với Angular injector 

test.ts

   Chúng ta khai báo một interface để đón dữ liệu trả về từ server, nó bao gồm các field mà chúng ta đã tạo ở trên.

test.service.ts

   Để sử dụng thư viện HttpClientModule trong file test.service.ts chúng ta cần khai báo nó như một dependency trong hàm contructor. Chúng ta sử dụng link api được tạo để giả lập giữ liệu được server trả về. Trong hàm getData() chúng ta sử dụng phương thức get trong rest api. Trong phương thức get kiểu trả về là Observable nên trong phương thức getData() và nó cần trả về một array các object, vì vậy chúng ta cần return một observable có type là một array Test[].

test.service.component.ts

Trong component chúng ta có instance của testService và dùng nó để gọi đến method getData() ở test.service.ts. Method getData() return một Observable nên để đón nhận dữ liệu chúng ta cần subscrise nó, sử dụng property binding để truyền dữ liệu ra view.

test.compnent.html

Việc cuối cùng là tạo ra một bảng để hiển thị ra dữ liệu. Ở đây tôi đang sử dụng Bootstrap 4 để trông đẹp mắt hơn, việc này đồng nghĩa với việc bạn phải import bootstrap vào project của 

Khởi chạy server bằng lệnh: ng serve -o và xem kết quả:





Nhận xét

Bài đăng phổ biến từ blog này

Đa ngôn ngữ trong Angular  Trong phần này mình sẽ thêm chức năng đa ngôn ngữ cho project angular. Chúng ta sử dụng thư viện @ngx-translate cho bài viết, bạn có thể tham khảo ở  @ngx-translate   Trước tiên chúng ta cần tạo project và import thư viện: ng new angular-translate cd  angular-translate npm install @ngx-translate/core --save npm install @ngx-translate/http-loader --save Sau đó chúng ta import thư viện  TranslateModule  vào app.module.ts: -Tiếp đó chúng ta tao 2 file en.json và vn.json vào thư mục /assets/i18n/en.json -Tiếp đó chúng ta thiết lập sự kiện click chuyển ngôn ngữ trong file app.component.ts: - Để hiển thị trên giao diện, chúng ta sử dụng service TranslateService đã được khai báo trong contructor() như một pipe: Kết quả : Bằng việc truyền value vào event switchLanguage() chúng ta có thể thay đổi ngôn ngữ của trang Như vậy chúng ta đã hoàn thành xong việ...
  Giới thiệu về Spring Integration Giới thiệu      Spring Integration là một framework cho phép việc cấu hình động các tầng của hệ thống.  Nó giúp cho việc cấu hình linh động, dàn xếp các module trở nên độc lập, dễ dàng thay đổi phù hợp mục đích nâng cấp (xem hình 1 ) Hình - 1    Spring Integration cho phép nhắn tin giữa các module dựa trên Spring-based applications và nó hỗ trợ tích hợp với các hệ thông bên ngoài thông qua bộ khai báo. Mục đích chính của Spring Integration là cung cấp một mô hình đơn giản để xây dựng các giải pháp tích hợp doanh nghiệp trong khi vẫn duy trì cac mối liên kết cần thiết để có thể kiểm tra, bảo trì.    Nó đưa khái niệm về POJO lên thêm một bước nữa, nơi mà POJO được kết nối với nhau bằng cách sử dụng một mô hình nhắn tin và các thành phần riêng lẻ không thể nhận biết được các thành phần khác trong ứng dụng. Một ứng dụng được xây dựng bằng cách lắp ráp các thành phần, có thể tái sử dụng, tạ...