基于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 相关文章推荐
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
Dec 11 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
Oct 17 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
简洁实用的BootStrap jQuery手风琴插件
Aug 31 Javascript
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
Mar 19 Javascript
vue router 用户登陆功能的实例代码
Apr 24 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
JavaScript如何优化逻辑判断代码详解
Jun 08 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
adodb与adodb_lite之比较
2006/12/31 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
医学生求职自荐信
2013/10/25 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
党支部综合考察意见
2015/06/01 职场文书
环境卫生标语
2015/08/03 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js