zoukankan      html  css  js  c++  java
  • Vue.js—快速入门及实现图书管理系统

      前  言

    今天我们主要一起来学习一个新框架的使用——Vue.js,之前我们也讲过AngularJS是如何使用的,而今天要讲的Vue.js的语法和AngularJS很相似,因为 AngularJS 是 Vue 早期开发的灵感来源。然而,AngularJS 中存在的许多问题,在 Vue 中已经得到解决。AngularJS 使用双向绑定,Vue 在不同组件间强制使用单向数据流,这使应用中的数据流更加清晰易懂。

    在实现图书馆系统之前,我们先学习一下Vue.js的一些基础语法的使用。

    1   第一个Vue实例

    每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的,当创建一个 Vue 实例时,你可以传入一个选项对象

    一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。

     Vue.js使用{{ }}绑定表达式,用于将表达式的内容输出到页面中。表达式可以是文字,运算符,变量等,也可以在表达式中进行运算输出结果
              

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9            {{message}}    
    10         </div>
    11         
    12         <script type="text/javascript" src="js/vue.js" ></script>
    13         <script type="text/javascript">
    14             //声明式渲染
    15             var app = new Vue({   //创建Vue对象
    16                 el:"#app",   //把当前Vue对象挂载到div标签上,#app是ID选择器  
    17                 data:{
    18                     message:"Hello Vue!",//message是自定义的数据
    19                 }
    20             
    21             });
    22         </script>
    23     </body>
    24 </html>

    在创建Vue实例时,需要传入一个选项对象,选项对象可以包含数据、挂载元素、方法、模生命周期钩子等等。

    在这个示例中,选项对象el属性指向View,el: '#app'表示该Vue实例将挂载到<div id="app">...</div>这个元素;

    data属性指向Model,data: message表示我们的Model是message对象。
    Vue.js有多种数据绑定的语法,最基础的形式是文本插值,使用一对大括号语法,在运行时{{ message }}会被数据对象的message属性替换,所以页面上会输出"Hello World!"。

    2   双向绑定实例

    首先我们先解释一下什么是双向绑定, Vue框架很核心的功能就是双向的数据绑定。双向是指:HTML标签数据绑定到Vue对象,另外反方向数据也是绑定的。MVVM模式本身是实现了双向绑定的,在Vue.js中可以使用v-model指令在表单元素上创建双向数据绑定。将message绑定到文本框,当更改文本框的值时,{{ message }} 中的内容也会被更新。反之,如果改变message的值,文本框的值也会被更新。反过来,如果改变message的值,文本框的值也会被更新,我们可以在Chrome控制台进行尝试。

    下面的栗子是在表单控件元素(input等)上创建双向数据绑定(数据源);跟Angular中ng-model用法一样。

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             {{message}}
    10        
    11 
    13             <input v-model="message" />
    14         </div>
    15     </body>
    16     <script type="text/javascript" src="js/vue.js" ></script>
    17         <script type="text/javascript">
    18             //声明式渲染
    19             var app = new Vue({  
    20                 el:"#app",   
    21                 data:{
    22                     message:"Hello Vue",
    23                 }
    24             
    25             });
    26     </script>
    27 </html>

    3   Vue.js的常用指令

    上面用到的v-model是Vue.js常用的一个指令,那什么是指令呢?

    Vue.js的指令是以v-开头的,它们作用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的HTML特性。

    Vue.js提供了一些常用的内置指令,接下来就给大家介绍几个Vue中的常用指令:

    1、v-if指令

    2、v-else指令

    3、v-show指令

    4、v-for指令

    5、v-on指令

    6、v-bind 指令

    3.1v-if指令

    v-if是条件渲染指令,它根据表达式的真假来删除和插入元素,这个例子演示了我们不仅可以绑定 DOM 文本到数据,也可以绑定 DOM 结构到数据。

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             <h1>Hello, Vue.js!</h1>
    10             <h1 v-if="yes">Yes</h1>
    11             <h1 v-if="no">No</h1>
    12             <h1 v-if="age >= 12">Age: {{ age }}</h1>
    13         </div>
    14     </body>
    15     <script src="js/vue.js"></script>
    16     <script>
    17         
    18         var vm = new Vue({
    19             el: '#app',
    20             data: {
    21                 yes: true,
    22                 no: false,
    23                 age: 20,           
    24         }
    25         })
    26     </script>
    27 </html>

    3.2v-else指令

    可以用 v-else 指令给 v-if 添加一个 "else" 块,条件都不符合时渲染。v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             <div v-if="num>90">
    10                 {{score1}}
    11             </div>
    12             <div v-else>
    13                 {{bananer}}
    14             </div>
    15         </div>
    16         
    17    <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
    18         <script type="text/javascript">
    19             var app = new Vue({
    20                 el: "#app",
    21                 data:{
    22                     num:98,
    23                     score1:"恭喜你是优秀哦!",
    24                     score2:"需要继续努力哦!"
    25                 }
    26             });
    27         </script>
    28     </body>
    29 </html>

    3.3v-show指令

    v-show也是条件渲染指令,和v-if指令不同的是,使用v-show指令的元素始终会被渲染到HTML,它只是简单地为元素设置CSS的style属性。值得我们注意的是,v-show 不支持 <template> 元素,也不支持 v-else

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>综合实例</title>
     6     </head>
     7     <body>
     8     <div id="app">
     9         <h1 v-show="teng">这是个真理!</h1>
    10             <template v-show="false">
    11                 <div>我好漂亮!</div>
    12                 <div>我非常漂亮!</div>
    13                 <div>我特别漂亮!</div>
    14             </template>
    15     </div>
    16     </body>
    17  <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
    18     <script type="text/javascript">
    19         var vm=new Vue({
    20             el:'#app',
    21             data:{
    22                 teng:true
    23             }
    24         })
    25     </script>
    26 </html>

    3.4v-for指令

    循环使用 v-for 指令,v-for 指令可以绑定数组的数据来渲染一个项目列表。

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             <ol>
    10                 <li v-for="teng in shuai">
    11                   {{ teng.name }}
    12                 </li>
    13             </ol>
    14         </div>
    15         
    16         <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
    17         <script type="text/javascript">
    18             var app = new Vue({
    19                 el: "#app",
    20                 data:{
    21                     shuai: [
    22                       { name: '帅!' },
    23                       { name: '真帅!' },
    24                       { name: '特别帅!' }
    25                     ]
    26                 }
    27             });
    28         </script>
    29     </body>
    30 </html>

     

    3.5v-on指令

    事件监听可以使用 v-on 指令。

    通常情况下,我们需要使用一个方法来调用 JavaScript 方法。v-on 可以接收一个定义的方法来调用。除了直接绑定到一个方法,也可以用内联 JavaScript 语句.

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             <p><input type="text" v-model="message"></p>
    10             <p>
    11                 <!--click事件直接绑定一个方法-->
    12                 <button v-on:click="teng"></button>
    13             </p>
    14             <p>
    15                 <!--click事件使用内联语句-->
    16                 <button v-on:click="say('帅!')"></button>
    17             </p>
    18         </div>
    19     </body>
    20    <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
    21     <script>
    22         var vm = new Vue({
    23             el: '#app',
    24             data: {
    25                 message: 'Hello, Vue.js'
    26             },
    27            
    28             methods: {
    29                 teng: function() {
    30                 
    31                     alert(this.message)
    32                 },
    33                 say: function(msg) {
    34                     alert(msg)
    35                 }
    36             }
    37         })
    38     </script>
    39 </html>

    3.6v-bind 指令

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title></title>
     6 <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
     7 <style>
     8 .red {
     9     width: 100px;
    10     height: 100px;
    11     background: green;
    12 }
    13 .style {
    14     background: red;
    15 }
    16 </style>
    17 </head>
    18 <body>
    19 <div id="app">
    20   <div v-bind:class="class1"></div>
    21 </div>
    22 
    23 <script>
    24 new Vue({
    25   el: '#app',
    26   data: {
    27     class1: {
    28       red: true,
    29       'style': true
    30     }
    31   }
    32 })
    33 </script>
    34 </body>
    35 </html>

    4图书系统管理

    根据上面我们所学习Vue的内容,我们来做一个图书管理系统进一步熟悉Vue.js的使用。

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title>Document</title>
      6          <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
      7         <script src="js/vue.js"></script>
      8         <style type="text/css">
      9             #update-book{
     10                 display: none;
     11             }
     12         </style>
     13     </head>
     14      <body>
     15         <div class="container">
     16             <div class="col-md-6 col-md-offset-3">
     17                 <h1>Vue demo</h1>
     18                  
     19                 <div id="app">
     20                     <table class="table table-hover ">
     21                         <br />
     22                         <thead>
     23                             <tr>
     24                                 <th>序号</th>
     25                                 <th>书名</th>
     26                                 <th>作者</th>
     27                                 <th>价格</th>
     28                                 <th>操作</th>
     29                             </tr>
     30                         </thead>
     31                         <tbody>
     32                             <tr v-for="book in filterBooks">
     33                                 <td>{{book.id}}</td>
     34                                 <td>{{book.name}}</td>
     35                                 <td>{{book.author}}</td>
     36                                 <td>{{book.price}}</td>
     37                                 <template v-if="book.id%2==0">
     38                                     <td class="text-left">
     39                                         <button type="button" class="btn btn-success" class="del" @click="delBook(book)">删除</button>
     40                                         <button type="button" class="btn btn-success" @click="updataBook(book)">修改</button>
     41                                     </td>
     42                                 </template>
     43                                 <template v-else>
     44                                     <td class="text-left">
     45                                         <button type="button" class="btn btn-danger" class="del" @click="delBook(book)">删除</button>
     46                                         <button type="button" class="btn btn-danger" @click="updataBook(book)">修改</button>
     47                                     </td>
     48                                 </template>
     49                             </tr>
     50                         </tbody>
     51                     </table>
     52                  
     53                     <div id="add-book">
     54                         <div class="row" style="margin-bottom: 30px;">
     55                             <div class="col-md-3"style="text-align: right;font-size: 16px;line-height: 30px;">
     56                                 请输入书名
     57                             </div>
     58                             <div class="col-md-5">
     59                                 <input type="text"class="form-control" v-model="search"/>
     60                             </div>
     61                         </div>
     62 
     63                         <h3>添加书籍</h3>
     64                         <hr />
     65                         <div class="form-group">
     66                             <label for="group">书名</label>
     67                             <input type="text" class="form-control" id="group" v-model="book.name">
     68                         </div>
     69                         <div class="form-group">
     70                             <label for="author">作者</label>
     71                             <input type="text" class="form-control" id="author" v-model="book.author">
     72                         </div>
     73                         <div class="form-group">
     74                             <label for="price">价格</label>
     75                             <input type="text" class="form-control" id="price" v-model="book.price">
     76                         </div>
     77                         <button class="btn btn-primary btn-block" v-on:click="addBook()">添加</button>
     78                     </div>
     79                     
     80                     <div id="update-book">
     81                         <h3>修改书籍</h3>
     82                         <hr />
     83                         <div class="form-group">
     84                             <label for="group1">书名</label>
     85                             <input type="text" class="form-control" id="group1" v-model="book.name">
     86                         </div>
     87                         <div class="form-group">
     88                             <label for="author1">作者</label>
     89                             <input type="text" class="form-control" id="author1" v-model="book.author">
     90                         </div>
     91                         <div class="form-group">
     92                             <label for="price1">价格</label>
     93                             <input type="text" class="form-control" id="price1" v-model="book.price">
     94                         </div>
     95                         <button class="btn btn-primary btn-block" @click="updatasBook()">完成</button>
     96                     </div>
     97                 </div>
     98             </div>
     99         </div>
    100         <script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
    101         <script type="text/javascript" src="js/tushu.js" ></script>
    102      </body>
    103 </html>

    JS代码:

     1 var id=0;
     2 new Vue({
     3     el:'#app',
     4     methods:{
     5         addBook:function(){
     6             this.book.id=this.books.length+1;
     7             this.books.push(this.book);
     8             this.book={};
     9         },
    10         delBook:function(book){
    11         var blength=this.books.length;
    12         this.books.splice(book.id-1,1);
    13             for(var i=0;i<blength;i++){
    14                 if(book.id<this.books[i].id){
    15                     this.books[i].id-=1;
    16                 }
    17             }
    18     },
    19         updataBook:function(book){
    20             $("#add-book").css("display","none");
    21             $("#update-book").css("display","block");
    22             id=book.id;
    23         },
    24         updatasBook:function(){
    25             this.book.id=id;
    26             this.books.splice(id-1,1,this.book);
    27             $("#add-book").css("display","block");
    28             $("#update-book").css("display","none");
    29             this.book = {};
    30         },
    31     },
    32     computed:{
    33         filterBooks:function(){
    34             var books=this.books;
    35             var search=this.search;
    36 //            if(!search){
    37 //                return books;
    38 //            }
    39 //            var arr=[];
    40 //            for(var i=0;i<books.length;i++){
    41 //                var index=books[i].name.indexOf(search);
    42 //                if(index>-1){
    43 //                    arr.push(books[i]);
    44 //                }
    45 //            }
    46 //            return arr;
    47             
    48             return books.filter(function(book){
    49                 return book.name.toLowerCase().indexOf(search.toLowerCase())!=-1;
    50             })
    51         }
    52     },
    53         data:{
    54         book:{
    55             id:"",
    56             author:"",
    57             name:"",
    58             price:""
    59         },
    60         books:[{
    61             id:1,
    62             author:"张三",
    63             name:"张三自传漫画",
    64             price:12.0
    65         },
    66         {
    67             id:2,
    68             author:"李四",
    69             name:"李四自传漫画",
    70             price:12.0
    71         },
    72         {
    73             id:3,
    74             author:"张三",
    75             name:"张三自传漫画",
    76             price:12.0
    77         }
    78         ],
    79         search:""
    80     }
    81         
    82 })

     增加数据:

     修改数据:

    查询和删除:

  • 相关阅读:
    开发中,android手机WIFI无法使用,无SIM卡故障解决
    2017-2018-1 20179226《Linux内核原理与分析》第五周作业
    2017-2018-1 20179226《Linux内核原理与分析》第四周作业
    2017-2018-1 20179226《Linux内核原理与分析》第三周作业
    2017-2018-1 20179226《Linux内核原理与分析》第二周作业
    20179226《Linux内核原理与分析》第一周读书笔记
    python全栈开发_day31_TCP,UPD和粘包问题
    python全栈开发_day29_元类(下)
    python全栈开发_day28_元类(上)
    python全栈_day27_选课系统项目编写
  • 原文地址:https://www.cnblogs.com/zxt-17862802783/p/7862626.html
Copyright © 2011-2022 走看看