图书管理业务
Ajax图书管理业务
需求: 对服务器的图书数据进行 增、删、改、查。功能的实现,同时实时动态的渲染刷新页面内容
根据功能模块分为四个业务模块,下面有各个业务的实现步骤
01_ 渲染图书列表业务
* 目标1:渲染图书列表
* 1.1 获取数据
* 1.2 渲染数据
业务1代码
javascript// 固定的携带参数别名 const creator = '刘不住' // 封装 -获取并渲染图书列表函数 function getBooksList() { //1.1 获取数据 axios({ url: 'http://hmajax.itheima.net/api/books', params: { // 传递外号:获取对应数据 creator } }).then((result) => { console.log(result) const bookList = result.data.data console.log(bookList) // 1.2 渲染数据 const htmlStr = bookList.map((item,index) => { return `<tr> <td>${index + 1}</td> <td>${item.bookname}</td> <td>${item.author}</td> <td>${item.publisher}</td> <td> <span class="del">删除</span> <span class="edit">编辑</span> </td> </tr>` }).join('') console.log(htmlStr) document.querySelector('.list').innerHTML = htmlStr }) } // 网页加载运行,获取并渲染列表一次 getBooksList()
02_新增图书业务
目标2:新增图书
* 2.1 新增弹框 -> 显示和隐藏
* 2.2 收集表单数据,并提交给服务器
* 2.3 刷新图书列表、同时重置表单
业务2代码
javascript// 2.1 创建一个弹框对象 const addModalDom = document.querySelector('.add-modal') const addModal = new bootstrap.Modal(addModalDom) // 给保存按钮添加点击事件 document.querySelector('.add-btn').addEventListener('click', () => { // 2.2 收集表单数据,并提交给服务器 const form = document.querySelector('.add-form') // 使用serialize插件的函数获取拥有anme属性的表单值 const data = serialize(form, { hash: true, empty: true }) // 使用对象解构对获取的值进行处理,用于提交数据 const { bookname, author, publisher } = data console.log(data) // 2.2.1 向服务器发送提交请求(提交到服务器) axios({ url: 'http://hmajax.itheima.net/api/books', method: 'post', data: { ...data, creator } }).then(result => { console.log(result) // 2.3 服务器响应后我们需要重新渲染图书数据列表 getBooksList() // 重置表单 form.reset() // 隐藏弹框 addModal.hide() }) })
这里的显示,我们使用bootstrap属性控制就可以了,但是隐藏我们需要提交数据,所以我们使用js来控制。
03_删除图书业务
* 目标3: 删除图书
* 3.1 删除元素绑定点击事件 -> 获取图书id
* 3.2 调用删除接口
* 3.3 刷新图书列表
业务3代码
javascript// 3.1 删除元素 -> 点击(事件委托) 动态创建,我们委托父级 document.querySelector('.list').addEventListener('click', e => { // console.log(e.target) // 判断用户点击的元素 if (e.target.classList.contains('del')) { // console.log('点击删除元素') // 获取图书id(我们动态创建的自定义属性id) const theId = e.target.parentNode.dataset.id console.log(theId) // 3.2 调用删除接口 axios({ // 使用模板字符串 路径传参 url: `http://hmajax.itheima.net/api/books/${theId}`, method: 'DELETE' }).then(result => { // 3.3 刷新图书列表 getBooksList() console.log(result) }).catch(error => { console.log(error) console.log(error.response.data.message) }) } })
04_编辑图书业务
* 目标4 :编辑图书
* 4.1 编辑弹框 -> 显示和隐藏
* 4.2 获取当前编辑图书数据 -> 回显到编辑表单中
* 4.3 提交保存修改 ,并刷新列表
业务4代码
javascript// 4.1 编辑弹框 -> 显示和隐藏 (使用js方式控制) const editDom = document.querySelector('.edit-modal') // 通过bootstrap.Modal构造函数创建一个实例对象 const editModal = new bootstrap.Modal(editDom) // 给编辑元素 -> 绑定 ->委托事件 document.querySelector('.list').addEventListener('click', e => { // 判断点击的是否为 edit 这个类 的标签 if (e.target.classList.contains('edit')) { // console.log('编辑') // 4.2 获取当前编辑图书数据 -> 回显到编辑表单中 const theId = e.target.parentNode.dataset.id // console.log(theId) axios({ // 路径传参 嵌入进去 url: `http://hmajax.itheima.net/api/books/${theId}`, method: 'GET', }).then(result => { const bookObj = result.data.data // document.querySelector('.edit-form .bookname').value = bookObj.bookname // document.querySelector('.edit-form .author').value = bookObj.author // 数据对象"属性"和标签"类名"一致 // 遍历数据对象,使用属性去获取对应标签,快速赋值 const keys = Object.keys(bookObj) //['id', 'bookname', 'author', 'publisher'] keys.forEach(key => { document.querySelector(`.edit-form .${key}`).value = bookObj[key] }) }) // 给弹框对象添加show方法,让编辑框显示出来 editModal.show() } }) // 修改按钮 -> 点击 -> 隐藏按钮 document.querySelector('.edit-btn').addEventListener('click', () => { // 4.3 提交保存修改 ,并刷新列表 const editForm = document.querySelector('.edit-form') const bookObj = serialize(editForm ,{ hash: true ,empty: true }) // 下面是保存正在编辑的图书id ,隐藏起来:无需让用户修改 // <input type="hidden" class="id" name="id" value="228500"> axios({ url: `http://hmajax.itheima.net/api/books/${bookObj.id}`, method: 'PUT', data: { ...bookObj, creator } }).then(() => { // 修改成功以后,重新获取并刷新列表 getBooksList() // 隐藏弹框 editModal.hide() }) })
业务总结
- 核心的步骤
* 业务1:渲染图书列表
* 1.1 获取数据
* 1.2 渲染数据
业务2:新增图书 * 2.1 新增弹框 -> 显示和隐藏
* 2.2 收集表单数据,并提交给服务器
* 2.3 刷新图书列表、同时重置表单
* 业务3: 删除图书* 3.1 删除元素绑定点击事件 -> 获取图书id
* 3.2 调用删除接口
* 3.3 刷新图书列表
* 业务4 :编辑图书
- 显示和隐藏
* 4.2 获取当前编辑图书数据 -> 回显到编辑表单中
* 4.3 提交保存修改 ,并刷新列表
在所有的查询和请求中,只要服务器的数据发生变化,同时也需要渲染刷新页面的内容.