Angular render component trước khi data về
Chuyện là em có đang làm thử 1 web e-learning bằng angular . . .
Đến phần hiển thị các khóa học thì gặp trục trặc . . .
Mấy ngày trước data các khóa học để ở local thì nó hiển thị . . .
Em có thử cho get data khóa học từ firebase thì nó không hiển thị ngay . . .
Phải chuyển qua 1 component khác rồi quay trở lại nó mới hiển thị . . .
Theo em hiểu thì data get từ firebase về có độ trễ . . .
Do đó data chưa về tới nơi thì angular nó render ra và bị trống . . .
Hiện tại em không chắc mình có sai chỗ nào không . . .
Và chưa nghĩ ra cách giải quyết . . .
Em có deploy lên firebase thử . . .
Mọi người coi qua rồi giúp em . . .
https://kha-e-learning.firebaseapp.com/
Kịch bản hiện tại là vào web - không hiện data - chuyển qua contact - chuyển lại về home thì data lại hiển thị . . .
https://gitlab.com/nkha0103/e-Learning-Project/blob/master/src/app/providers/course.service.ts - Đây là services em dùng để get data khóa học từ firebase
https://gitlab.com/nkha0103/e-Learning-Project/blob/master/src/app/main-content/intro/intro.component.ts - Đây là component dùng services trên để lấy data đó
vậy thì đợi data trả về rồi mới binding data vào.
MDN Web Docs
Dùng promise cũng được
Promise
The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.
Cám ơn anh cơ mà thực sự thì em chưa hiểu về promise lắm . . .
Trong trường hợp của em . . .
Em đứng từ component gọi tới hàm get data ở services . . .
Vậy dùng promise ở services hay tại component ta . . .
promise ở service chứ
dạng vậy nè
sau đó gọi như vầy:
Cám ơn anh vì mất chút thời gian . . .
Cơ mà hơi khó để trình bày chút thì đoạn code component của em nó như này . . .
Em debug thì hiểu là data lúc get ở chỗ “this._courseService.getCourses();” nó chưa kịp next . . .
Thì đã chạy tiếp hàm phía dưới . . .
Thì phải chăng mình nên promise ở đây không ta . . .
nếu bên kia tra về promise thì nó nó phải như thế này
Ô cám ơn anh . . .
Nhìn có vẻ hiểu rồi . . .
Để chiều làm về thử phát . . .
Hoặc bạn có thể dùng async await function.
Cái này hình như là cải tiến của promise nè phải không ta . . .
Để em tham khảo thử . . .
Tặng bạn đoạn code này
Cái này trong tàng kinh các của mình, bảo đảm chạy, chịu khó áp dụng vào trường hợp bạn.
Hay bạn vào trang
vibigaba.esy.es
có đoạn code tương tự thế
Cám ơn bác . . .
Em mới chỉ get data thử thôi chứ chưa tới đây nữa hehe . . .
khuyên bạn 1 câu, lên youtube học mấy khóa angular mấy trung tâm post lên, mày mò xào nấu sẽ hiểu đc khoảng 20 30% về nó, sau đó vô angular.io để học cho đàng hoàng, có tutorial và tài liệu giải thích khá rõ ràng. Chứ học kiểu này bug quài dễ nản ^^
Em cũng là học qua rồi bắt tay vào làm thử gặp bug thì đi hỏi mà bác . . .
Chưa coi qua sao biết route riếc gì dc bác . . . ^^