Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
Vue入门实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"> {{ message }} </div> </body> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: "#app", data() { return { message: 'Hello Vue !' } } }) </script> </html>
|
总结:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 1. vue的使用要从创建Vue对象开始 var vm = new Vue(); 2. 创建vue对象的时候,需要传递参数,是json对象,json对象对象必须至少有两个属性成员 var vm = new Vue({ el:"#app", data: {
}, data() { return { 数据变量:"变量值", 数据变量:"变量值", } } }); el:设置vue可以操作的html内容范围,值一般就是css的id选择器。 data: 保存vue.js中要显示到html页面的数据。 3. vue.js要控制器的内容范围,必须先通过id来设置。 <div id="app"> <h1>{{message}}</h1> <p>{{message}}</p> </div>
|
Vue的MVVM思想
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式。
Model
指代的就是vue对象的data属性里面的数据。这里的数据要显示到页面中。
View
指代的就是vue中数据要显示的HTML页面,在vue中,也称之为“视图模板” 。
ViewModel
指代的是vue.js中我们编写代码时的vm对象了,它是vue.js的核心,负责连接 View 和 Model,保证视图和数据的一致性,所以前面代码中,data里面的数据被显示中p标签中就是vm对象自动完成的。

在浏览器中可以在 console.log通过 vm对象可以直接访问el和data属性,甚至可以访问data里面的数据
1 2 3 4
| console.log(vm.$el) # #box vm对象可以控制的范围 console.log(vm.$data); # vm对象要显示到页面中的数据 console.log(vm.$data.message); # 访问data里面的数据 console.log(vm.message);# 这个 message就是data里面声明的数据,也可以使用 vm.变量名显示其他数据,message只是举例.
|
Vue指令
Vue 指令是带有 v- 前缀的特殊 attribute,它的值是一个表达式,指令帮助我们操作 DOM,当表达式的值发生改变时更新渲染 DOM。
v-text
是元素的 InnerText 属性,它的作用和之前我们使用的 {{}}
一样,用于数据绑定
v-html
是元素的 innerHTML,它用于绑定一段 html
标签
v-bind
用于给元素的属性赋值。v-bind
后面是 :属性名=[变量名],可以直接通过:属性名
简写
v-for
用于列表的循环渲染。基本语法:v-for="item in data"
,data 可以是数组或者对象
v-if
和v-show
两个指令来控制页面元素的显示和隐藏
v-if
:根据表达式的值在 DOM 中生成或移除一个元素。
v-show
:根据表达式的值通过样式的改变来显示或者隐藏 HTML 元素。
v-if、v-else-if、v-else
进行条件判断
v-on
来进行事件的绑定。用法:v-on:事件名="方法"
,可用@事件类型
简写,常见事件类型@submit @focus @blur @click
v-model
实现数据的双向绑定
v-pre
跳过所在元素和它的子元素的编译过程,也就是把这个节点及其子节点当作一个静态节点来处理
v-once
只会在第一次更新时显示数据,此后更新该 DOM 里面引用的数据时,内容不会自动更新
Vue动态样式绑定
通过传给 v-bind:class
一个对象,以动态地切换 class:
1
| <div v-bind:class="{ show: isShow }">Hello !</div>
|
数组语法
1
| <div v-bind:class="[classA, classB]">Hello !</div>
|
三元表达式
1
| <div v-bind:class="[isShow ? showClass : '', classB]"></div>
|
内联样式v-bind:style
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 格式1:值是json对象,对象写在元素的:style属性中 标签元素: <div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div> data数据如下: data: { activeColor: 'red', fontSize: 30 } 格式2:值是对象变量名,对象在data中进行声明 标签元素: <div v-bind:style="styleObject"></div> data数据如下: data: { styleObject: { color: 'red', fontSize: '13px' } }
格式3:值是数组 标签元素: <div v-bind:style="[style1, style2]"></div> data数据如下: data: { style1:{ color:"red" }, style2:{ background:"yellow", fontSize: "21px" } }
|
计算属性computed
1 2 3 4 5
| computed: { totalPrice() { return this.count * this.unitPrice } }
|
Vue侦听器
侦听器 watch
是 Vue
提供的一种用来观察和响应 Vue
实例上的数据变化的属性。当被侦听的数据发生变化时,会触发对应的侦听函数。
vue会传入两个形参,第一个是变化前的数据值,第二个是变化后的数据值。
deep
属性代表是否深度监听,默认值是 false。当设置为 true 时,会对对象里面的每个属性进行侦听
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <body> <div id="app"> <p>{{ num }}</p> <button @click="num++">按钮</button> </div> </body> <script> window.onload = function(){ var vm = new Vue({ el:"#app", data:{ num:20 }, watch:{ num:function(newval,oldval){ console.log("num已经发生了变化!"); } } }) } </script>
|
Vue事件处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| # 1.点击事件 @click @click="Func" # 不带参数 @click="Func(10)" # 带参数 @click="Func(10, $event)" # 获取原生事件对象
methods: { Func(count, event) { this.count = count console.log(event) } } # 2.事件修饰符 event.preventDefault() # 用来取消事件的默认动作。 event.stopPropagation() # 用来阻止事件冒泡到父元素,阻止任何父事件处理程序被执行。 <!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"></a>
<!-- 添加事件监听器时使用事件捕获模式 --> <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 --> <div v-on:click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>
# 3.按键修饰符 <!-- 只有在 `key` 是 `Enter` 时调用 `login()` --> <input v-on:keyup.enter="login"> .enter: 回车键; .tab: TAB键; .delete: 删除和退格键; .esc: 只有在event.终止键; .space: 删除键; .up: 上方向键: .down: 下方向键: .left: 左方向键: .right: 右方向键:
|
Vue生命周期
每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能。
- beforeCreate(创建前)
- created(创建后)
- beforeMount (载入前)
- mounted(载入后)
- beforeUpdate(更新前)
- updated(更新后)
- beforeDestroy(销毁前)
- destroyed(销毁后)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.min.js"></script> <script> window.onload = function(){ var vm = new Vue({ el:"#app", data:{ num:0 }, beforeCreate:function(){ console.log("beforeCreate,vm对象尚未创建,num="+ this.num); this.name=10; }, created:function(){ console.log("created,vm对象创建完成,设置好了要控制的元素范围,num="+this.num ); this.num = 20; }, beforeMount:function(){ console.log( this.$el.innerHTML ); // <p>{{num}}</p> console.log("beforeMount,vm对象尚未把data数据显示到页面中,num="+this.num ); this.num = 30; }, mounted:function(){ console.log( this.$el.innerHTML ); console.log("mounted,vm对象已经把data数据显示到页面中,num="+this.num); }, beforeUpdate:function(){ console.log( this.$el.innerHTML ); console.log("beforeUpdate,vm对象尚未把更新后的data数据显示到页面中,num="+this.num); }, updated:function(){ console.log( this.$el.innerHTML ); console.log("updated,vm对象已经把过呢更新后的data数据显示到页面中,num=" + this.num ); }, }); } </script> </head> <body> <div id="app"> <p>{{num}}</p> <button @click="num++">按钮</button> </div> </body> </html>
|
总结:
1 2 3 4 5
| 在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。 mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。
另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created
|
Vue过滤器
过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。
定义过滤器的方式有两种。
- 使用Vue.filter()进行全局定义
1 2 3 4 5 6 7 8 9 10 11
| Vue.filter("RMB", function(v){ if(v==0){ return v } return v+"元 }) Vue.filter("dot", function(data,digit){ // digit 保留小数位 return data.toFixed(digit); });
|
- 在 Vue 实例
options
中使用 filters
选项来注册局部过滤器,这样过滤器只能在这个实例中使用:
1 2 3 4 5 6 7 8 9 10 11
| filters: { '过滤器名字': function(value) { // 具体过滤逻辑 } }
{{ message | filteName }}
<div v-bind:id="message | filteName"></div>
|
Vue插件
插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制,一般有下面几种:
- 添加全局方法或者属性。如: vue-custom-element。
- 添加全局资源:指令 / 过滤器 / 过渡等。如 vue-touch。
- 通过全局混入来添加一些组件选项。如 vue-router。
- 添加 Vue 实例方法,通过把它们添加到
Vue.prototype
上实现。
- 一个库,提供自己的 API,同时提供上面提到的一个或多个功能。如 vue-router。
Vue 插件是对 Vue 全局功能的扩展,他可以给 Vue 添加全局方法、属性、组件、过滤器、指令等等。
通过全局方法 Vue.use () 使用插件。它需要在你调用 new Vue () 启动应用之前完成
axios
vue.js默认没有提供ajax功能的。
axios 是一个基于 promise 的 HTTP 库,所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互。
注:axios本质上就是javascript的ajax封装,所以会被同源策略限制。
下载地址:
1 2 3
| https://unpkg.com/axios@0.18.0/dist/axios.js https://unpkg.com/axios@0.18.0/dist/axios.min.js
|
学习文档:http://www.axios-js.com/zh-cn/docs/
axios提供发送http请求的常用方法有两个:axios.get() 和 axios.post() 。
其他:delete/put/patch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
axios.get('服务器的资源地址',{ params:{ 参数名:'参数值', }, headers:{ 选项名:'选项值', }
}).then(function (response) { console.log("请求成功"); console.log(response.data);
}).catch(function (error) { console.log("请求失败"); console.log(error.response); });
axios.post('服务器的资源地址',{ username: 'xiaoming', password: '123456' },{ headers:{ 选项名:"选项值", } }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); });
|
补充:js中json数据转换
javascript提供了一个JSON对象来操作json数据的数据转换.
方法 |
参数 |
返回值 |
描述 |
stringify |
json对象 |
字符串 |
json对象转成字符串 |
parse |
字符串 |
json对象 |
字符串格式的json数据转成json对象 |