Questions Management – Frontend – Xây dựng phần cập nhập question

Xem toàn bộ series bài viết hướng dẫn xây dựng ứng dụng Questions Management tại đây.

Để cập nhập một question trong phần Frontend của ứng dụng Questions Management, đầu tiên mình sẽ cần thêm mới trong class QuestionsService một phương thức cho phép chúng ta có thể gọi tới API cập nhập question của API Question Service để truyền thông tin về question mà chúng ta cần cập nhập.

Cụ thể method này như sau:

Bởi vì chúng ta truyền nội dung của question dưới dạng JSON nên như các bạn thấy, mình đã sử dụng một biến headers với khai báo:

để thực hiện việc này.

Tiếp theo chúng ta sẽ xây dựng form để cập nhập question.

Trong trang All Questions, khi người dùng click vào nút Edit của mỗi dòng tương ứng với một question trong bảng, mình sẽ cho popup một cửa sổ sử dụng Bootstrap Modal cho phép người dùng có thể cập nhập thông tin của question này. Có 2 thông tin trong cửa sổ này đó chính là description về câu hỏi và Category mà câu hỏi này thuộc về.

Để làm được những điều trên, trong tập tin all_questions_component.html trong thư mục src/app/questions/all_questions, mình sẽ thêm mới phần Bootstrap Modal này sau “<!– /.panel –>” với nội dung như sau:

Để hiển thị popup này lên mình sẽ sửa lại code cho phần button “Edit”, từ:

thành:

Như các bạn thấy, id của Bootstrap Modal này là “editQuestionModal”. Mình đã định nghĩa thêm biến currentEditDescription trong class AllQuestionsComponent để giữ thông tin về description của question mà chúng ta đang muốn cập nhập:

Còn phần Category thì mình cũng định nghĩa một biến currentEditCategory để nắm giữ thông tin Category của question cần cập nhập:

Khi người dùng click vào nút “Edit” thì ứng dụng của chúng ta sẽ gọi tới phương thức editQuestion() trong class AllQuestionsComponent với tham số là đối tượng CompositeQuestion của question cần cập nhập. Bên trong phương thức editQuestion(), chúng ta cần khởi tạo một đối tượng Question để nắm giữa thông tin mới của question cần cập nhập và gán giá trị cho currentEditDescription, currentEditCategory như sau:

Như các bạn thấy, mình cũng đã định nghĩa một biến là categories:

và lấy tất cả Category có trong hệ thống để hiển thị bằng cách sử dụng CategoriesService.

Để giữ thông tin về Category mà chúng ta chọn cho question mới này, mình sử dụng biến selectedCategory trong class AllQuestionsComponent

Khi popup hiện lên, chúng ta cần select Category hiện tại mà question này thuộc về nên mình đã khai báo sử dụng directive compareWith của Angular trong thẻ <select> với giá trị là tên phương thức byCategory() được định nghĩa trong class AllQuestionsComponent như sau:

Khi người dùng nhấn vào nút “Update”, phương thức updateQuestion() trong class AllQuestionsComponent sẽ được gọi để thực hiện việc cập nhập question như sau:

với phương thức destroyDatatable() và handleError() có nội dung như sau:

OK, vậy là chúng ta đã hiện thực xong phần cập nhập question trong phần Frontend của ứng dụng Questions Management rồi đó các bạn. Thử test xem sao nhé!

Trong trang All Questions, mình nhấn vào nút “Edit” của một question bất kỳ, một cửa sổ sẽ hiện ra như sau:

Questions Management – Frontend – Xây dựng phần cập nhập question

Sau khi sửa nội dung của question này, các bạn nhấn nút Update thì kết quả sẽ như sau:

Questions Management – Frontend – Xây dựng phần cập nhập question

Add Comment