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