基于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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
Jan 11 Javascript
基于jquery的监控数据是否发生改变
Apr 11 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
Javasript设计模式之链式调用详解
Apr 26 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 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
php中Ctype函数用法详解
2014/12/09 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
js 页面输出值
2008/11/30 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
js读取本地文件的实例
2017/12/22 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Python程序慢的重要原因
2020/09/04 Python
工商管理专业学生的自我评价
2013/10/01 职场文书
仓库管理专业个人自我评价范文
2013/11/11 职场文书
《值日生》教学反思
2014/02/17 职场文书
大学生创业项目方案
2014/03/08 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
监理中标通知书
2015/04/16 职场文书
员工旷工检讨书
2015/08/15 职场文书
靠谱的活动总结
2019/04/16 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python