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 })
增加数据:
修改数据:
查询和删除:
以上是 Vue.js—快速入门及实现图书管理系统 的全部内容, 来源链接: utcz.com/z/376156.html