Vue-图书管理案例
前置条件
- 安装Visual Studio Code(代码编辑器)
- 电脑已安装node.js
- 配置好vue相关文件
开始构建
电脑任意位置新建文件夹命名为”Vue-图书管理”
新建文件index.html 并创建基本html结构
因为是局部使用vue ,需要cdn方式引入Vue
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
开始 new vue实例 并赋值为vm,在其内部构建
<script> const vm = new Vue({ el:'#app', //获取vue的边界element元素 即展示的区域 data:{ }, methods:{ } }) </script>
将data里放入图书的数组数据
data:{ books: [ { id: 1, name: "三国演义", price: "12", }, { id: 2, name: "水浒传", price: "20", }, { id: 3, name: "红楼梦", price: "20512", }, { id: 4, name: "西游记", price: "212", }, ], },
布局基本html样式
<h2>图书管理</h2> <div id="app"> <div > 编号:<input type="text" v-model="obj.id"> 名称:<input type="text" v-model="obj.name"> 价格:<input type="text" v-model="obj.price"> <button type="submit" @click="submit">提交</button> </div> <p>图书总数: {{num}}</p> <table border="1" cellspacing='0' width="300px"> <tr> <th>编号</th> <th>名称</th> <th>价格</th> <th>操作</th> </tr> <tr v-for="(item,index) in books" :key="item.id"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td> <a href="">编辑</a> | <a href="">删除</a> </td> </tr> </table> </div>
增加添加图书功能
<script> const vm = new Vue({ el:'#app', //获取vue的边界element元素 即展示的区域 data:{ obj:{ id:'', name:'', price:'', }, newobj:'', num:'', books: [ { id: 1, name: "三国演义", price: "12", }, { id: 2, name: "水浒传", price: "20", }, { id: 3, name: "红楼梦", price: "21", }, { id: 4, name: "西游记", price: "22", }, ], }, methods:{ submit(){ // 1.获取用户输入的信息 并保存到data里的obj里 this.newobj = this.o // 2. 追加数组 将obj对象推入data中 books里 this.books.push(this.newob // 3. 清空输入框的信息 this.obj = { id:'', name:'', price:'', } }, } }) </script>
编辑图书功能
<body> <h2>图书管理</h2> <div id="app"> <div > 编号:<input type="text" v-model="obj.id" :disabled="isDisabled"> 名称:<input type="text" v-model="obj.name"> 价格:<input type="text" v-model="obj.price"> <button type="submit" @click="submit" :disabled="noSubmit">提交</button> </div> <p>图书总数: {{num}}</p> <table border="1" cellspacing='0' width="300px"> <tr> <th>编号</th> <th>名称</th> <th>价格</th> <th>操作</th> </tr> <tr v-for="(item,index) in books" :key="item.id"> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.price}}</td> <td> <a href="##" @click.prevent="editor(index)">编辑</a> | <a href="##">删除</a> </td> </tr> </table> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script> Vue.config.productionTip= false; const vm = new Vue({ el:'#app', //获取vue的边界element元素 即展示的区域 data:{ noSubmit:false, //禁止提交按钮的状态 isDisabled:false, //默认可以点击 indexData:'', //存储index标识 obj:{ id:'', name:'', price:'', }, newobj:'', num:'2', books: [ { id: 1, name: "三国演义", price: "12", }, { id: 2, name: "水浒传", price: "20", }, { id: 3, name: "红楼梦", price: "21", }, { id: 4, name: "西游记", price: "22", }, ], }, methods:{ // 提交按钮 submit(){ // 判断是否是提交新数据还是修改旧数据 if(this.isDisabled) { //编辑功能: // 方法 1: 获取index 找操作的行元素 修改它 // console.log('编辑'); // console.log('编辑的当前行',this.books[this.indexData]); // this.books[this.indexData].name = this.obj.name // this.books[this.indexData].price = this.obj.price // 方法 2: 找id 获取编辑的id == books里面的id // 使用方法 some 查找原数组里是否有某元素 如果有返回true // ele 可以获取books数组的每一项 this.books.some( (ele) => { if( ele.id == this.obj.id){ //这个ele就是编辑的数据 ele.name = this.obj.name ele.price = this.obj.price return true } }) // 释放禁止按钮 this.isDisabled = false; }else { //添加功能 // 1.获取用户输入的信息 并保存到data里的obj里 this.newobj = this.obj // 2. 追加数组 将obj对象推入data中 books里 this.books.push(this.newobj) } // 3. 清空输入框的信息 this.obj = { id:'', name:'', price:'', } }, // 编辑按钮 editor(index){ //1 获取当前行的数据 渲染到文本框中 console.log(this.books[index]); // this.obj.id = this.books[index].id // this.obj.name = this.books[index].name // this.obj.price = this.books[index].price this.obj = this.books[index] // 2. 编辑的时候--编号禁止操作 this.isDisabled = true; // 3. 存储index下标---目的:提交的时候 修改的是哪个数据用 this.indexData = index; } }, //侦听器 watch:{ "obj.name":function(val){ console.log('监听了数据变化',val); var flag = this.books.some(ele => { return ele.name == val }) if(flag) { this.noSubmit = true alert('已经存在相同名称书籍') } else { this.noSubmit = false } } } }) </script>
评论