基于vue.js快速搭建图书管理平台


Posted in Javascript onOctober 29, 2017

Vue.js是当下很火的一个JavaScript MVVM(Model-View-ViewModel)库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。

上一期简单讲解了vue的基本语法,这一次我们做一个小项目,搭建一个简单的图书管理平台,能够让我们更深刻的理解这门语言的妙用。

1、DEMO样式

首先我们需要搭建一个简单的demo样式,推荐大家使用bootstrap,可以很快的搭建出一个清晰简洁的页面。

给大家分享一段我的代码吧。

<div class="container">
  <div class="col-md-6 col-md-offset-3">
  <h1>Vue demo</h1>
   
  <div id="app">
   <table class="table table-hover ">
    <caption></caption>
   <thead>
    <tr>
    <th>序号</th>
    <th>书名</th>
    <th>作者</th>
    <th>价格</th>
    <th>操作</th>
    </tr>
   </thead>
   </table>
   
   <div id="add-book">
   <legend>添加书籍</legend>
   <div class="form-group">
    <label for="group">书名</label>
    <input type="text" class="form-control" id="group">
   </div>
   <div class="form-group">
    <label for="author">作者</label>
    <input type="text" class="form-control" id="author">
   </div>
   <div class="form-group">
    <label for="price">价格</label>
    <input type="text" class="form-control" id="price">
   </div>
   <button class="btn btn-primary btn-block">添加</button>
   <button class="btn btn-primary btn-block">查询</button>
   </div>
   
   <div id="update-book">
   <legend>修改书籍</legend>
   <div class="form-group">
    <label for="group1">书名</label>
    <input type="text" class="form-control" id="group1">
   </div>
   <div class="form-group">
    <label for="author1">作者</label>
    <input type="text" class="form-control" id="author1">
   </div>
   <div class="form-group">
    <label for="price1">价格</label>
    <input type="text" class="form-control" id="price1">
   </div>
   <button class="btn btn-primary btn-block">完成</button>
   </div>
  </div>
  </div>
 </div>

运用了bootstrap的栅格系统,和一些简单的组件,不光简单快捷,还能自动实现响应式呢。

而且做出来的效果也不难看,挺整洁的。

给大家看下刚开始的效果图。

基于vue.js快速搭建图书管理平台

如果对这个CSS框架没有了解的话,自己写一下样式也没关系。

2、创建vue实例

接下来,我们导入自己的JS文件,创建一个vue实例。

new Vue({
 el: '#app',
 data: {
 book: {
  id: 0,
  author: '',
  name: '',
  price: ''
 },
 books: [{
  id: 1,
  author: '曹雪芹',
  name: '红楼梦',
  price: 32.0
 }, {
  id: 2,
  author: '施耐庵',
  name: '水浒传',
  price: 30.0
 }, {
  id: '3',
  author: '罗贯中',
  name: '三国演义',
  price: 24.0
 }, {
  id: 4,
  author: '吴承恩',
  name: '西游记',
  price: 20.0
 }]
 }
 });

data中是一些初始的数据,可以随意填写。

3 、将各种指令添加到HTML 

我们说过,vue的核心聚焦在视图层,所以指令是最重要的一步,我们一点一点说。

不过因为指令分布的比较乱,所以直接附上全部代码,然后我一个一个的解释。

<div id="app">
   <table class="table table-hover ">
    <caption></caption>
   <thead>
    <tr>
    <th>序号</th>
    <th>书名</th>
    <th>作者</th>
    <th>价格</th>
    <th>操作</th>
    </tr>
   </thead>
   <tbody>
    <tr v-cloak v-for="book in books"> 
    <td>{{book.id}}</td>
    <td>{{book.name}}</td>
    <td>{{book.author}}</td>
    <td>{{book.price}}</td>
    <template v-if="book.id%2==0">
     <td class="text-left">
     <button type="button" class="btn btn-success" @click="delBook(book)" class="del">删除</button>
     <button type="button" class="btn btn-success" @click="updateBook(book)">修改</button>
     </td>
    </template>
    <template v-else>
     <td class="text-left">
     <button type="button" class="btn btn-danger" @click="delBook(book)" class="del">删除</button>
     <button type="button" class="btn btn-danger" @click="updateBook(book)">修改</button>
     </td>
    </template>
    </tr>
   </tbody>
   </table>
   
   <div id="add-book">
   <legend>添加书籍</legend>
   <div class="form-group">
    <label for="group">书名</label>
    <input type="text" class="form-control" id="group" v-model="book.name">
   </div>
   <div class="form-group">
    <label for="author">作者</label>
    <input type="text" class="form-control" id="author" v-model="book.author">
   </div>
   <div class="form-group">
    <label for="price">价格</label>
    <input type="text" class="form-control" id="price" v-model="book.price">
   </div>
   <button class="btn btn-primary btn-block" v-on:click="addBook()">添加</button>
   <button class="btn btn-primary btn-block" v-on:click="searchBook()">查询</button>
   </div>
   
   <div id="update-book">
   <legend>修改书籍</legend>
   <div class="form-group">
    <label for="group1">书名</label>
    <input type="text" class="form-control" id="group1" v-model="book.name">
   </div>
   <div class="form-group">
    <label for="author1">作者</label>
    <input type="text" class="form-control" id="author1" v-model="book.author">
   </div>
   <div class="form-group">
    <label for="price1">价格</label>
    <input type="text" class="form-control" id="price1" v-model="book.price">
   </div>
   <button class="btn btn-primary btn-block" v-on:click="updatesBook()">完成</button>
   </div>
  </div>

首先,将id为app的vue实例挂载到DOM节点上,如果对于这些基本内容还不了解的话,可以去看我的上一篇博客,详细的介绍了关于vue的基础知识。

下面的表格,在tr中通过一个v-for循环,将vue实例data中的数据,全部载入到表格里。

细心的读者应该发现了,我在v-for前写了一个v-cloak,这是干什么的呢?

用过angular,vue这种框架的人应该都知道,当我们用{{}}绑定数据的时候,当页面刷新的瞬间,会看到闪烁而过的原始代码。

当信息量比较大的时候,这种体验无疑是十分恶劣的,这个时候,v-cloak这个指令保持在元素上直到关联实例结束编译。

和 CSS 规则如[v-cloak] { display: none }一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。

这样就解决了刷新的瞬间页面出现大量乱码的情况。

下面的v-if和v-else就是为了练习一下各种指令啦,让我们的按钮生成的时候可以轮流生成两种颜色~

而v-model是为了在input中输入内容时,可以动态的取到输入的内容。

还是那句话,这些基本指令不认识的话,可以去我的上一篇博客查看。

那些v-on:click绑定的函数,一会一个一个详细解释,现在先来看一下效果。

基于vue.js快速搭建图书管理平台

还不错吧~接下来我们就开始说一下各个函数。

addBook: function() {
  //计算书的id
  this.book.id = this.books.length + 1;
  this.books.push(this.book);
  //将input中的数据重置
  this.book = {};
 }

这个是添加函数,大家可以去上面看一下vue实例中data里面的代码。

其实就只是这么几行代码,vue的强大就已经展现的淋漓尽致了。

因为我们在输入框中绑定了v-model,所以我们输入的内容就会动态的与book这个对象同步。

这个函数的原理就是给book那个对象的id赋值,然后将通过v-model动态绑定到输入框上的数据,也就是我们输入的数据,push进books那个数组。

最后将book对象清空,也就是把我们的输入框清空了。

区区3行代码,信息的录入就完成了,是不是很神奇呢。

哦对了,在vue实例中,this指向的就是本身这个vue实例,对面向对象的概念没有了解的话,建议百度一下this指向问题。

下面看一下删除

delBook: function(book) {
  var blength = this.books.length;
  this.books.splice(book.id-1, 1);
  for( var i = 0; i < blength ; i++) {
  if(book.id < this.books[i].id) { 
   this.books[i].id -= 1;
  }
  } 
 }

删除的原理是取到当前books数组的长度,当前选中的那一条的下标是它的id-1,用splice方法将它删除。

然后通过循环,将id比被删除数据大的那些项的id都减去1,保持序号的连续。

然后是修改 

updateBook: function(book) {
  $("#add-book").css("display","none");
  $("#update-book").css("display","block");
  id = book.id;
 },
 updatesBook:function(book) {
  this.book.id = id;
  this.books.splice(id-1,1,this.book);
  $("#add-book").css("display","block");
  $("#update-book").css("display","none");
  this.book = {};

 第一个函数就是将修改框弹出来,把添加的框隐藏掉,然后把需要修改的id绑定到一个全局的变量上~

然后第一个函数才是真正的修改命令。

将刚才绑定的全局变量,赋值给当前id,然后还是用splice方法,用输入的内容把原来的内容替换掉~

然后还是同样的,将book对象也就是输入框清空。

结尾

 这样一个简单的信息录入平台就完成了,虽然代码不多,但是足以让我们深深感受到vue的强大。

 未来页面的发展趋势,一定是绕不开这样的设计思路的。

以上所述是小编给大家介绍的基于vue.js快速搭建图书管理平台,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
为原生js Array增加each方法
Apr 07 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
AngularJs 终极购物车(实例讲解)
Nov 08 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
Aug 05 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
在antd Form表单中select设置初始值操作
Nov 02 Javascript
微信小程序自定义底部弹出框功能
Nov 18 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 #Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 #jQuery
ES6中Class类的静态方法实例小结
Oct 28 #Javascript
jQuery实现的简单前端搜索功能示例
Oct 28 #jQuery
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 #jQuery
jquery ajax异步提交表单数据的方法
Oct 27 #jQuery
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 #Javascript
You might like
截获网站title标签之家内容的例子
2006/10/09 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
Python程序语言快速上手教程
2012/07/18 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python常见的pandas用法demo示例
2019/03/16 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
党校培训思想汇报
2013/12/30 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
我爱我家教学反思
2014/05/01 职场文书
个人课题方案
2014/05/08 职场文书
司法局火灾防控方案
2014/06/05 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
热血教师观后感
2015/06/10 职场文书