后端程序员的 VUE 超简单入门笔记

开发 前端
现在的各种开源项目中使用 Vue 的越来越多了,作为一个后端程序员不会点 Vue 也都玩不转了。

 现在的各种开源项目中使用 Vue 的越来越多了,作为一个后端程序员不会点 Vue 也都玩不转了。所以抽空学习了一下 Vue 的简单用法,整理成笔记,方便有需要的同学一起学习。

Vue 是一个前端的框架,被称作是 渐进式 JavaScript 框架。在进入 Vue 的官网时即可看到,上面图的就是从 Vue 官网复制的。

什么是 渐进式 框架,这里我们引用官网的原文来看,原文如下:

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

https://cn.vuejs.org/v2/guide/

Vue 可以作为整个前端开发的一部分,也可以作为一个整体。也就是说,可以使用 Vue 的部分功能来构建前端,也可以完全使用 Vue 来构建前端。大概就是这样的意思。

一、Vue 的开始

Vue 的开始还是很方便的,只需要引入一个库文件 —— vue.js 即可开始。我们可以去 Vue 的官网下载,也可以通过 CDN 来直接引入 vue 都可以。这里我下载了 vue.min.js 文件。

创建一个 HTML 文件,然后引入 vue.min.js 文件,接着实现一个简单的 Hello Vue 的程序。代码如下:

  1. <body> 
  2.     <div id="app"
  3.         <!-- 插值表达式,绑定vue中的data --> 
  4.         {{message}} 
  5.     </div> 
  6.     <script src="vue.min.js"></script> 
  7.     <script> 
  8.         // 创建一个vue对象 
  9.         new Vue({ 
  10.             el:'#app',  // 绑定vue作用的范围 
  11.             data: {     // 定义页面中显示的模型数据 
  12.                 message: 'Hello Vue!' 
  13.             } 
  14.         }) 
  15. </script> 
  16. </body> 

在上面的代码中,通过 <script src="vue.min.js"> 引入了 vue 的库文件,然后通过 new Vue 来创建一个 Vue 的对象。其中 el 是 DOM 的 id,表示该 Vue 对象是针对该 DOM 中。在 data 中定义了值 “Hello Vue” 为 message 变量,然后在 id 为 app 的 div 标签中通过 插值表达式(使用 {{}} 插入的变量) 来输出 message 变量的值。

Vue 中的 el 和 data 是固定的写法,el 和一个标签进行关联,表示该 Vue 对象只和该标签关联,data 是用来定义变量使用的。

这样就构建了一个简单的 Vue 的 HTML 页面。Vue 内部完成了 DOM 的绑定操作,无需像 jQuery 那样获取 DOM 的操作。

二、单向绑定

单向绑定的指令是 v-bind,它用在标签属性上面,通过它可以获取 data 中定义的变量的值。代码如下:

  1. <body> 
  2.     <div id="app"
  3.         <!-- v-bind 在标签的属性中,取到vue在data中定义的变量的值 --> 
  4.         <div v-bind:style="msg">单向绑定</div> 
  5.         <div :style="msg">单向绑定</div> 
  6.     </div> 
  7.     <script src="vue.min.js"></script> 
  8.     <script> 
  9.         new Vue({ 
  10.             el: '#app'
  11.             data: { 
  12.                 msg: 'color: blue;' 
  13.             } 
  14.         }) 
  15. </script> 
  16. </body> 

单向绑定可以时 v-bind 也可以省略 v-bind,但是注意,冒号不能省略。上面的代码中相当于给 style 设置了 color:blue 属性,运行效果如下图:

三、双向绑定

双向绑定通过指令 v-model 来完成,下面的代码中,data 中的 keyword 会影响 div 中的两个 input 框,第二个 input 框使用的 v-model 指令,那么当改变第二个 input 框中的值时,同样会改变 data 中 keyword 的值;又由于改变了 data 中 keyword 的值,从而第一个 input 框的值也会随之改变。

  1. <body> 
  2.     <div id="app"
  3.         {{keyword}}<br> 
  4.         <!-- 单向绑定 --> 
  5.         <input type="text" :value="keyword"><br> 
  6.         <!-- 双向绑定 --> 
  7.         <input type="text" v-model="keyword"><br> 
  8.     </div> 
  9.     <script src="vue.min.js"></script> 
  10.     <script> 
  11.         new Vue({ 
  12.             el: '#app'
  13.             data: { 
  14.                 keyword: 'test' 
  15.             } 
  16.         }) 
  17. </script> 
  18. </body> 

运行如下图所示:

改变第二个 input 的值,如下图所示:

可以看到,通过修改第二个 input 框的值,上面的值也跟着发生了改变。

四、事件绑定

事件绑定是对事件的监听,可以通过 v-on 或 @ 指令来完成,代码如下:

  1. <body> 
  2.     <div id="app"
  3.         <button v-on:click="show()">事件绑定1</button> 
  4.         <button @click="show()">事件绑定2</button> 
  5.     </div> 
  6.     <script src="vue.min.js"></script> 
  7.     <script> 
  8.         new Vue({ 
  9.             el: '#app'
  10.             data: { 
  11.                 keyword: 'test' 
  12.             }, 
  13.             methods: { 
  14.                 show() { 
  15.                     console.log("show...."
  16.                 } 
  17.             } 
  18.         }) 
  19. </script> 
  20. </body> 

上面的代码中,通过 v-on 和 @ 将 Button 和 show() 方法进行绑定,输出如下图所示:

上面的代码中,在 Vue 对象中增加了 methods,在 methods 中可以用来定义方法。

五、条件指令

条件指令使用 v-if 和 v-else 来完成,看如下代码:

  1. <body> 
  2.     <div id="app"
  3.         <input type="checkbox" v-model="ok"
  4.         <span v-if="ok">选中了</span> 
  5.         <span v-else>没有选中</span> 
  6.     </div> 
  7.     <script src="vue.min.js"></script> 
  8.     <script> 
  9.         new Vue({ 
  10.             el: '#app'
  11.             data: { 
  12.                 ok: false 
  13.             } 
  14.         }) 
  15. </script> 
  16. </body> 

上面的代码中,通过 v-model 和 ok 来进行双向绑定,然后当改变 checkbox 的选中状态时,v-if 和 v-else 会自动改变文字描述。

六、循环指令

循环指令使用 v-for,它可以用来遍历数组从而渲染一个列表,看如下代码:

  1. <body> 
  2.     <div id="app"
  3.         <div v-for="(user, index) in userList"
  4.             {{index+1}} -- {{user.name}} -- {{user.age}} 
  5.         </div> 
  6.     </div> 
  7.     <script src="vue.min.js"></script> 
  8.     <script> 
  9.         new Vue({ 
  10.             el: '#app'
  11.             data: { 
  12.                 userList: [ 
  13.                     {"name":"张三""age":20}, 
  14.                     {"name":"李斯""age":30}, 
  15.                 ] 
  16.             } 
  17.         }) 
  18. </script> 
  19. </body> 

上面的代码中 index 是一个循环的计数从 0 开始,然后循环 userList Json 数组,输出如下图:

七、Vue 生命周期

Vue 的生命周期,就是创建、销毁 Vue 对象时会自动执行的几个函数,Vue 的官网提供了一个生命周期图,该图的地址如下:

https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA

我这里从官网复制过来,如下图。

在上图中可以看到,不同的生命周期有不同的方法会被执行,比如 created、updated、destroyed 等。

这里写代码进行测试:

  1. <body> 
  2.     <div id="app"
  3.         {{msg}} 
  4.     </div> 
  5.     <script src="vue.min.js"></script> 
  6.     <script> 
  7.         new Vue({ 
  8.             el: '#app'
  9.             data: { 
  10.                 msg: 'hello' 
  11.             }, 
  12.             // 在页面渲染之前执行 
  13.             created() { 
  14.                 debugger 
  15.                 console.log('created...'
  16.             }, 
  17.             // 在页面渲染之后执行 
  18.             mounted() { 
  19.                 debugger 
  20.                 console.log('mounted...'
  21.             } 
  22.         }) 
  23. </script> 
  24. </body> 

在代码的 created 和 mounted 两处放入了 debugger 命令,打开 F12 的调试窗口时,当执行到 debugger 位置处时,会自动触发断点从而断下,首先断在 created 方法中,如下图:

从上图可以看出,此时的插值表达式并没有进行实际的替换,按 F8 让页面继续渲染,会断在 mounted 方法中,如下图:

此时可以看到,插值表达式已经变成了 hello。这样可以清楚的看到不同的生命周期会触发不同的方法。

八、axios 和 vue-resource 库

axios 是基于 Promise 的 Ajax 的库,在 Vue 中有一个 vue-resource 库用于实现异步加载的库。在 Vue.js 2.0 中推荐使用 axios 来完成 Ajax 的请求。这里给出演示的代码,代码如下:

  1. <body> 
  2.     <div id="app"
  3.         <table> 
  4.             <tr v-for="(user, index) in userList"
  5.                 <td>{{index + 1}}</td> 
  6.                 <td>{{user.name}}</td> 
  7.                 <td>{{user.age}}</td> 
  8.             </tr> 
  9.         </table> 
  10.         <table> 
  11.             <tr v-for="(it, index) in itList"
  12.                 <td>{{index + 1}}</td> 
  13.                 <td>{{it.name}}</td> 
  14.                 <td>{{it.age}}</td> 
  15.             </tr> 
  16.         </table> 
  17.     </div> 
  18.     <script src="vue.min.js"></script> 
  19.     <script src="axios.min.js"></script> 
  20.     <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script> 
  21.     <script> 
  22.         new Vue({ 
  23.             el: '#app'
  24.             data: { 
  25.                 userList : [], 
  26.                 itList: [] 
  27.             }, 
  28.             // 在页面渲染之前执行 
  29.             created() { 
  30.                 // 调用方法,得到返回json数据 
  31.                 this.getUserList(), 
  32.                 this.getLanguageList() 
  33.             }, 
  34.             methods: { 
  35.                 getUserList() { 
  36.                     // 使用 axios 方式 ajax 请求 
  37.                     // 请求的接口路径 
  38.                     axios.get("user.json"
  39.                         // 请求成功 
  40.                         .then(response =>{ 
  41.                             console.log(response) 
  42.                             this.userList = response.data.data.items 
  43.                         }) 
  44.                         // 请求失败 
  45.                         .catch(error => { 
  46.                             console.log(error) 
  47.                         }) 
  48.                 }, 
  49.                 getLanguageList(){ 
  50.                     //发送get请求 
  51.                     this.$http.get('language.json').then(function(response){ 
  52.                         console.log(response.body); 
  53.                         this.itList = response.body.data.items 
  54.                     },function(){ 
  55.                         console.log('请求失败处理'); 
  56.                     }); 
  57.                 } 
  58.             } 
  59.         }) 
  60. </script> 
  61. </body> 

上面的代码中,同时演示了 axios 和 vue-resource 两个库。代码中直接请求了两个 json 文件,并没有去进行实际的接口请求。

九、总结

Vue 的内容不只有这么些,具体可以参考 Vue 的官网(https://cn.vuejs.org/v2/guide/)进行学习和了解。这里只是列出了可能使用较为频繁的部分。不对之初请予指正。

 

责任编辑:张燕妮 来源: 码农UP2U
相关推荐

2017-12-15 15:09:42

2019-05-15 23:04:19

程序员数据建模

2016-12-19 16:55:10

PHP程序员运维

2018-08-02 17:00:15

Vue.js学习iOS开发

2013-08-20 09:33:59

程序员

2016-01-05 10:30:59

后端程序员缓存原理

2024-05-06 00:00:00

2022-12-07 10:21:19

谷歌搜索技巧

2010-12-30 10:04:49

Linux入门

2020-02-14 15:16:16

程序员表白浪漫

2009-07-28 08:28:15

2011-05-13 14:34:02

程序员

2015-01-12 10:42:02

程序员

2009-01-16 19:49:49

程序员考试数组指针

2019-05-16 08:36:53

Eureka缓存网关

2015-06-02 11:01:18

JavaGo

2012-03-06 09:22:46

程序员

2019-06-23 17:37:58

Linux后端函数栈

2012-11-22 14:00:26

程序员

2017-11-14 21:30:15

点赞
收藏

51CTO技术栈公众号