From 5485131de0d8ced69a43f1dea1fa7927da04e044 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E6=95=8F?= <3234934487@qq.com>
Date: Mon, 11 Dec 2023 19:55:40 +0800
Subject: [PATCH] z
---
...0 \345\244\247\344\275\234\344\270\232.md" | 164 ++++++++++++++++++
1 file changed, 164 insertions(+)
create mode 100644 "56 \350\265\265\346\225\217/20231210 \345\244\247\344\275\234\344\270\232.md"
diff --git "a/56 \350\265\265\346\225\217/20231210 \345\244\247\344\275\234\344\270\232.md" "b/56 \350\265\265\346\225\217/20231210 \345\244\247\344\275\234\344\270\232.md"
new file mode 100644
index 0000000..ee78277
--- /dev/null
+++ "b/56 \350\265\265\346\225\217/20231210 \345\244\247\344\275\234\344\270\232.md"
@@ -0,0 +1,164 @@
+### 作业
+
+~~~ javascript
+/**
+ * 目标1:渲染图书列表
+ * 1.1 获取数据
+ * 1.2 渲染数据
+ */
+const tbody = document.querySelector('.list');
+// 通用的外号
+const creator = '大帅哥';
+// 封装一个先获取数据,再渲染数据的函数
+function render() {
+ axios({
+ url: 'https://hmajax.itheima.net/api/books',
+ params: {
+ creator: creator
+ }
+ }).then(result => {
+ // console.log(result);
+ const bookList = result.data.data;
+ const trHtml = bookList.map((item, i) => {
+ const { id, author, bookname, publisher } = item
+ return `
+
+ ${i + 1} |
+ ${bookname} |
+ ${author} |
+ ${publisher} |
+
+ 删除
+ 编辑
+ |
+
+ `
+ }).join('')
+ // console.log(trHtml);
+ tbody.innerHTML = trHtml;
+ })
+}
+// 打开网页就得先调用一次函数
+render();
+
+/**
+ * 目标2:实现图书的添加功能
+ * 2.1 采集表单数据
+ * 2.2 将数据用axios调用接口,提交给服务器
+ * 2.3 保存按钮的点击事件(显示和隐藏)
+ * 2.4
+ */
+const form = document.querySelector('.add-form');
+// 为了控制添加的弹窗,先获取
+const addModalBox = document.querySelector('.add-modal');
+const addModal = new bootstrap.Modal(addModalBox);
+// 给保存添加点击事件
+document.querySelector('.add-btn').addEventListener('click', () => {
+ // 采集数据
+ const book = serialize(form, { hash: true, empty: true })
+ // console.log(book);
+ // 将数据用axios调用接口,提交给服务器
+ axios({
+ url: 'https://hmajax.itheima.net/api/books',
+ method: 'post',
+ data: {
+ creator,
+ ...book
+ }
+ }).then(result => {
+ // console.log(result);
+ // 清空表单
+ form.reset();
+ // 关闭弹窗
+ addModal.hide();
+ // 重新获取列表并渲染
+ render();
+ })
+
+})
+
+
+/**
+ * 目标3:删除图书
+ * 3.1 给删除添加点击事件
+ * 3.2 获取要删除的id
+ * 3.3 通过id调用接口,删除服务器中的数据
+ * 3.4 成功就重新获取新列表并渲染
+ */
+
+// 将点击事件委托给tbody
+tbody.addEventListener('click', (e) => {
+ // console.log(e.target);
+ // 两种方案
+ // 1 className === 'del'
+ // 2 classList.contains('del')
+ if (e.target.classList.contains('del')) {
+ // console.log('666');
+ // console.log(e.target.parentNode.dataset.id);
+ const id = e.target.parentNode.dataset.id;
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + id,
+ method: 'delete'
+ }).then(result => {
+ render();
+ })
+ }
+})
+
+/**
+ * 目标4:实现编辑图书功能
+ * 4.1 点击编辑,显示修改的弹窗
+ * 4.2 获取编号id
+ * 4.3 通过id,调用接口查询到对应的图书数据
+ * 4.4 图书数据回显到表单里
+ * 4.5 修改按钮点击事件
+ * 4.6 采集修改后的表单数据,并提交给接口
+ * 4.7 成功后,隐藏,重新渲染列表
+ */
+tbody.addEventListener('click', (e) => {
+ if (e.target.className === 'edit') {
+ const form = document.querySelector('.edit-form');
+ // 为了控制添加的弹窗,先获取
+ const editModalBox = document.querySelector('.edit-modal');
+ const editModal = new bootstrap.Modal(editModalBox);
+ editModal.show();
+ // 获取编号id
+ const id = e.target.parentNode.dataset.id;
+ // 4.3 通过id,调用接口查询到对应的图书数据
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + id
+ }).then((result) => {
+ // console.log(result);
+ const book = result.data.data;
+ const { id, author, bookname, publisher } = book;
+ // 图书数据回显到表单里
+ form.querySelector('.id').value = id;
+ form.querySelector('.bookname').value = bookname;
+ form.querySelector('.author').value = author;
+ form.querySelector('.publisher').value = publisher;
+ })
+
+ // 修改按钮
+ document.querySelector('.edit-btn').addEventListener('click', () => {
+ // 4.6 采集修改后的表单数据,并提交给接口
+ // 采集数据
+ const book = serialize(form, { hash: true, empty: true })
+ // 提交给接口
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + id,
+ method: 'put',
+ data: {
+ creator,
+ ...book
+ }
+ }).then(result => {
+ // console.log(result);
+ // 4.7 成功后,隐藏,重新渲染列表
+ editModal.hide();
+ render();
+ })
+ })
+ }
+})
+~~~
+
--
Gitee