Vue添加书籍

17 篇文章 0 订阅
16 篇文章 0 订阅
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>图书管理系统</title>
		<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			table {
				width: 500px;
				margin: 0 auto;
				margin-top: 20px;
				border-collapse: collapse;
				border: 1px solid #ccc;
			}

			tr {
				height: 30px;
				text-align: center;
				line-height: 30px;
			}

			th {
				background: lightgreen;
			}

			.article {
				width: 400px;
				height: 400px;
				background: #ccc;
				margin: 0 auto;
				margin-top: 20px;
			}

			.article h2 {
				padding-top: 20px;
				width: 100%;
				text-align: center;
			}

			.article p {
				margin-top: 20px;
				text-align: center;
			}

			.article input {
				width: 280px;
				font-size: 24px;
				height: 40px;
			}

			.article button {
				outline: none;
				width: 80px;
				height: 50px;
				float: right;
				margin-right: 30px;
				margin-top: 30px;
			}
		</style>
	</head>
	<body>
		<div class="demo">
			<table border="1">
				<caption>图书管理系统</caption>
				<tbody>
					<tr>
						<th>序号</th>
						<th>书名</th>
						<th>作者</th>
						<th>价格</th>
						<th>标签</th>
						<th>操作</th>
					</tr>
					<tr v-for=" (book,index) in books">
						<td>{{index+1}}</td>
						<td>{{book.name}}</td>
						<td>{{book.art}}</td>
						<td>{{book.price}}</td>
						<td>{{book.text}}</td>
						<td><button @click="deleteFn(book)">删除</button></td>
					</tr>
				</tbody>
			</table>
			<div class="article">
				<h2>添加新书</h2>
				<p>书名 : <input type="text" class="name"></p>
				<p>作者 : <input type="text" class="art"></p>
				<p>价格 : <input type="number" class="price"></p>
				<p>标签 : <input type="text" class="text"></p>
				<button @click="add">添加</button>
			</div>
		</div>
		<script type="text/javascript">
			var demo = new Vue({
				el: '.demo',
				data: {
					books: [{
							name: '《水浒传》',
							art: '施耐庵',
							price: 50 + '¥',
							text: '热销'
						},
						{
							name: '《西游记》',
							art: '吴承恩',
							price: 60 + '¥',
							text: '经典'
						}
					]
				},
				methods: {
					add() {
						var newBook = {
							name: '《' + $(".name").val() + "》",
							art: $(".art").val(),
							price: $(".price").val() + '¥',
							text: $(".text").val()
						}
						$(".article").find("input").val('');
						if (newBook.name == '' || newBook.art == '' || newBook.price == '' || newBook.text == '') {
							alert('请输入您要添加的书籍');
						} else {
							this.books.push(newBook);
						}
					},
					deleteFn(book) {
						var index = this.books.indexOf(book);
						if (confirm('确定删除该书籍?')) {
							this.books.splice(index, 1);
						}
					}
				}
			})
		</script>
	</body>
</html>

对于Vue书籍添加修改删除页面,可以使用Vue Router和Vue组件来实现。 首先,在Vue项目中安装Vue Router: ``` npm install vue-router --save ``` 然后,在项目中创建一个`router.js`文件,用于配置路由: ```javascript import Vue from 'vue' import Router from 'vue-router' import BookList from '@/components/BookList' import AddBook from '@/components/AddBook' import EditBook from '@/components/EditBook' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'BookList', component: BookList }, { path: '/add', name: 'AddBook', component: AddBook }, { path: '/edit/:id', name: 'EditBook', component: EditBook } ] }) ``` 在这个文件中,我们定义了三个路由:`/`路径对应的是书籍列表页面(`BookList`组件),`/add`路径对应的是添加书籍页面(`AddBook`组件),`/edit/:id`路径对应的是编辑书籍页面(`EditBook`组件)。 然后,在`App.vue`的模板中添加路由的出口: ```html <template> <div id="app"> <router-view></router-view> </div> </template> ``` 这样,当访问不同的路径时,就会自动加载对应的组件。 下面,我们可以开始编写书籍列表、添加书籍、编辑书籍的组件了。 对于书籍列表组件,可以使用以下代码: ```html <template> <div> <h2>书籍列表</h2> <table> <thead> <tr> <th>ID</th> <th>书名</th> <th>作者</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="book in books" :key="book.id"> <td>{{ book.id }}</td> <td>{{ book.title }}</td> <td>{{ book.author }}</td> <td> <router-link :to="'/edit/' + book.id">编辑</router-link> <button @click="deleteBook(book.id)">删除</button> </td> </tr> </tbody> </table> <router-link to="/add">添加书籍</router-link> </div> </template> <script> export default { data() { return { books: [ { id: 1, title: 'Vue.js实战', author: '张三' }, { id: 2, title: 'React实战', author: '李四' }, { id: 3, title: 'Angular实战', author: '王五' } ] } }, methods: { deleteBook(id) { this.books = this.books.filter(book => book.id !== id) } } } </script> ``` 这个组件中,我们使用了`v-for`指令遍历书籍列表,同时使用了`router-link`组件来实现跳转到编辑书籍页面和添加书籍页面的操作。还定义了一个`deleteBook`方法,用于删除书籍。 对于添加书籍页面,可以使用以下代码: ```html <template> <div> <h2>添加书籍</h2> <form> <label> 书名:<input type="text" v-model="title"> </label> <br> <label> 作者:<input type="text" v-model="author"> </label> <br> <button type="button" @click="addBook">添加</button> </form> </div> </template> <script> export default { data() { return { title: '', author: '' } }, methods: { addBook() { const book = { id: Date.now(), title: this.title, author: this.author } this.$emit('add', book) this.title = '' this.author = '' } } } </script> ``` 在这个组件中,我们使用了`v-model`指令绑定了输入框的值,使用了`$emit`方法向父组件传递添加书籍的事件。 最后,是编辑书籍页面: ```html <template> <div> <h2>编辑书籍</h2> <form> <label> 书名:<input type="text" v-model="book.title"> </label> <br> <label> 作者:<input type="text" v-model="book.author"> </label> <br> <button type="button" @click="updateBook">保存</button> </form> </div> </template> <script> export default { data() { return { book: {} } }, created() { const id = this.$route.params.id this.book = this.$parent.books.find(book => book.id === Number(id)) }, methods: { updateBook() { this.$emit('update', this.book) } } } </script> ``` 在这个组件中,我们使用了`$route`对象获取了路由参数中的书籍ID,然后使用了`find`方法查找对应的书籍信息,并将其绑定到了输入框中,使用了`$emit`方法向父组件传递更新书籍的事件。 最后,在父组件中,我们可以使用以下代码来实现添加、更新和删除书籍的操作: ```html <template> <div> <router-view @add="addBook" @update="updateBook" :books="books" ></router-view> </div> </template> <script> export default { data() { return { books: [ { id: 1, title: 'Vue.js实战', author: '张三' }, { id: 2, title: 'React实战', author: '李四' }, { id: 3, title: 'Angular实战', author: '王五' } ] } }, methods: { addBook(book) { this.books.push(book) }, updateBook(book) { const index = this.books.findIndex(b => b.id === book.id) this.books.splice(index, 1, book) } } } </script> ``` 在这个组件中,我们使用了`router-view`组件来显示子组件,使用了`@add`和`@update`事件监听子组件的添加和更新书籍操作,并在方法中更新书籍列表。同时,在书籍列表组件中使用了`deleteBook`方法来删除书籍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裴嘉靖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值