ajax图书管理项目

embedded/2024/9/24 10:16:00/

bootstrap弹框

不离开当前页面,显示单独内容,让用户操作

 功能:不离开当前页面,显示单独内容,供用户操作步骤:
1.引入bootstrap.css和bootstrap.js                                                                                                    2.准备弹框标签,确认结构
3.通过自定义属性,控制弹框的显示和隐藏

<body> 
<button type="button" class ="btn btn-primary"
data-bs-toggle="model" data-bs-target=".my-box">显示弹框
</button>
<div class="modal my-box" tabindex="-1"><div class="modal-dialog"><!--弹框-内容--><div class="modal-content"><!--弹框-头部--><div class="modal-header"><h5 class="modal-title">Modal title</h5><button type="button" class="btn-close"data-bs-dismiss="modal" aria-label="Close"></button></div><!--弹框-身体--><div class="modal-body">.</div><!--弹框-底部--><div class="modal-footer"><button type="button" class="btn btn-secondary"data-bs-dismiss="modal">Close</button><button type="button" class="btn btn-primary">Savechanges</button></div></div></div>
</div>

可能会出现一些问题,可能因为你用的版本4的,里面没用bs-,把属性data-dismiss改为data-bs-dismiss就行了

和JS的适配

  • 通过属性控制,弹框显示或隐藏
  • 通过JS控制,弹框显示或隐藏

有这样一串代码

//创建弹框对象
const modalDom = document.queryselector('css选择器')
const modal = new bootstrap.Modal(modelDom)
//显示弹框
modal.show()
//雌就弹框
modal.hide()
<div class="modal name-box" tabindex="-1"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h5 class="modal-title">请输入姓名</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><form action=""><span>姓名:</span><input type="text" class="username"></form></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button><button type="button" class="btn btn-primarysave-btn">保存</button></div></div></div>
</div><!--导入bootstrap.js -->
<script>
//1.创建弹框对象
const modalDom = document.querySelector('.name-box')
const modal = new bootstrap.Modal(modalDom)
//编辑姓名->点击->赋予默认姓名->弹框显示
document.querySelector('.edit-btn').addEventListener('click', () => {document.querySelector('.username').value = '默认姓名'//2.显示弹框modal.show()})
//保存->点击->->获取姓名打印->弹框隐藏
document.querySelector('. save-btn').addEventlistener('click', () => {const username = document.querySelector('.username').valueconsole.log('模拟把姓名保存到服务器上',username)//2.隐藏弹框modal.hide()})
</script>

图书管理渲染列表

/**目标1:渲染图书列表* 1.1获取数据*1.2渲染数据
**/
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.dataconsole.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()

CUDA常见的 

添加数据
const addModalDom = document.querySelector('.add-modal')
const addModal = new bootstrap.Modal(addModalDom)
// 保存按钮 -> 点击 -> 隐藏弹框
document.querySelector('.add-btn').addEventListener('click', () => {//2.2收集表单数据,并提交到服务器保存const addForm = document.querySelector('.add-form')const bookObj = serialize(addForm, { hash: true, empty: true })console.log(bookObj)//提交到服务器axios({url: 'http: //hmajax.itheima.net/api/books',method: 'POST',data: {...book0bj,creator}}).then(result => {console.log(result)//2.3添加成功后,重新请求并渲染图书列表getBooksList()//重置表单addForm.reset()//隐藏弹框addModal.hide()})
删除数据
/* 目标3:删除图书* 3.1删除元素绑定点击事件 -> 获取图书id*3.2调用删除接口* 3.3刷新图书列表*/
//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.idconsole.log(theId)//3.2调用删除接口axios({url: `http://hmajax.itheima.net/api/books/${theId}`,method: 'DELETE'}).then()=> {//3.3刷新图书列表getBooksList()})}
})
编辑图书
/**
* 目标4:编辑图书* 4.1编辑弹框 -> 显示和隐藏* 4.2获取当前编辑图书数据 -> 回显到编辑表单中* 4.3提交保存修改,并刷新列表*/
//4.1编辑弹框->显示和隐藏
const editDom = document.querySelector('.edit-modal')
const editModal = new bootstrap.Modal(editDom)
//编辑元素->点击->弹框显示
document.querySelector('.list').addEventListener('click', e => {//判断点击的是否为编辑元素if (e.target.classlist.contains('edit')) {const theId=e.target.parentNode.dataset.idaxios({url:`http://hmajax.itheima.net/api/books/${theId}`}).then(result=>{const bookObj=result.data.datadocument.querySelector('.edit-form.bookname').value=bookObj.booknamedocument.querySelector('.edit-form.author').value=author//因为默认的是GET方式,所以现在这个可以不写method//遍历数据对象,使用属性获取对应的标签,快速赋值const keys =Object.keys(bookObj)//['id','bookname','author','publisher']keys.foreach(key=>{document.querySelector(`.edit-form.${key}`.value=bookObj[key]// 为什么不能点key因为获取过来的是字符串})})editModal.show()}
})
//修改按钮->点击->隐藏弹框
document.querySelector('.edit-btn').addEventListener('click', ()
=> {//4.3提交保存修改,并刷新列表const editForm = document.querySelector('.edit-form')const bookObj = serialize(editForm, { hash: true, empty: true}) console.log(bookobj)// 保存正在编辑的图书id,隐藏起来:无需让用户修改// <input type="hidden" class="id" name="id" value="84783" axios({url: `http://hmajax.itheima.net/api/books/{id}`,method:'PUT',data:{bookname,author,publisher,creator}
}).then(()=>{getBooksList()   editModal.hide()
})

happycat 


http://www.ppmy.cn/embedded/92880.html

相关文章

创建单例模式的方法

一.单例模式的定义&#xff1a; 单例模式确保某个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。在计算机系统中&#xff0c;线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台…

c# .Net Core 项目配置SWagger UI 带Token访问

简介 Swagger是一款强大的API管理工具&#xff0c;它主要用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger通过一套标准的规范定义接口及其相关信息&#xff0c;从而能够自动生成各种格式的接口文档&#xff08;如HTML、PDF、Markdown等&#xff09;&#xff0c;并…

武汉流星汇聚:卓越体验引领潮流,亚马逊赢得全球消费者喜爱

在浩瀚的电商海洋中&#xff0c;亚马逊如同一座璀璨的灯塔&#xff0c;吸引着全球消费者的目光。作为跨境电商的领军者&#xff0c;亚马逊不仅以其丰富的商品种类、便捷的购物流程赢得了消费者的青睐&#xff0c;更在平台流量与活跃用户积累方面展现出了无可比拟的优势。那么&a…

C语言实现计数排序

目录 1.基本思想 2.计数排序的特征 3.计数排序的基本步骤 4.计数排序算法实现 1.基本思想 (1)创建一个新的数组&#xff0c;数组的大小K 原数组中的最大值(max) - 最小值(min) 1&#xff0c;用于统计相同元素出现的次数。 (2)根据统计的结果按数组下标的顺序返回到原来…

嵌入式Linux之Ubuntu

第 1 章 Linux 入门 1.1 概述 Linux应用最广泛的服务器操作系统 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Limnux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位…

H5移动端兼容性问题处理总结

1. 当设置样式overflow:scroll/auto时&#xff0c;IOS上的滑动会卡顿 -webkit-overflow-scrolling:touch; 2. 在安卓环境下placeholder文字设置行高时会偏上 input有placeholder属性的时候不要设置行高 3. 移动端字体小于12px时异常显示 应该先把在整体放大一倍&#xff0…

Scrapy爬虫框架介绍、创建Scrapy项目

Scrapy官网&#xff1a;https://scrapy.org/ 什么是Scrapy Scrapy 是一个基于 Python 的快速的高级网页抓取和网页爬取框架&#xff0c;用于抓取网站并从其页面中提取结构化数据。它可用于多种用途&#xff0c;从数据挖掘到监控和自动化测试。 Scrapy核心组件 1. Scrapy Engin…

2024.08.02校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 加入蔚来智能制造&#xff0c;在蔚来预见未来&#xff08;内推&#xff09; 校招 | 加入蔚来智能制造&#xff0c;在蔚来预见未来&#xff08;内推&#xff09; 2、…