1.Vue具有双向数据绑定、轻量级框架和组件化的优势。
2.Vue和React的区别是Vue用DOM模板,React依赖虚拟DOM
3.methods定义方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>methods定义方法</title> <script src="vue.min.js"></script> </head> <body> <div class="app"> <button @click="show">请单击</button> <p>{{totalPrice}}</p> </div> </body> <script> var vm = new Vue({ el:'.app', data:{ message:'' }, methods: { show() { this.message = '成功触发事件' } } }) </script> </html>
点击后show()方法执行,message被赋值为‘成功触发事件’
4.computed计算属性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>computed计算属性</title> <script src="vue.min.js"></script> </head> <body> <div class="app"> <button @click="num++">增加数量</button> <button @click="num == 0 ? 0:num--">减少数量</button> <p>{{totalPrice}}</p> </div> </body> <script> var vm = new Vue({ el:'.app', data:{ num:0, price:25 }, computed: { totalPrice() { return this.num*this.price } } }) </script> </html>
computed中的方法可以直接通过插值语法绑定到p标签中
5.watch状态监听
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>watch状态监听</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <input type="text" v-model="city"> </div> </body> <script> var vm = new Vue({ el:'#app', data:{ city:'shanghai' }, watch:{ city(newName,oldName){ console.log(newName,oldName) } } }) </script> </html>
data中的值名称需要与watch中的函数名相同
6.filter过滤器的使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>filter过滤器</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <p>{{message | touppercase}}</p> </div> </body> <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ message:"helloworld" }, filters: { touppercase(value) { return value.toUpperCase() } } }) </script> </html>
输出结果为HELLOWORLD
7.在v-bind属性绑定中使用过滤器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="app"> {{ message | toupperCase}} <p :id="dataId | chatId">1111</p> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!', dataId:'hello' }, filters:{ toupperCase(value){ return value.toUpperCase() }, chatId(value){ return value ? value.indexOf('o') : '' } } }) </script> </html>
代码运行后p标签动态绑定的id为4
8.绑定内联样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>绑定内联样式</title> </head> <body> <div id="app"> <div :style="mDiv"></div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ mDiv:{width:'100px', height:'100px', backgroundColor:'red'} } }) </script> </html>
9.绑定样式类
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>绑定样式类</title> <style> .box{ width: 100px; height: 100px; background-color: aqua; } .inner{ width: 100px; height: 100px; background-color: red; border: 1px solid #000; } </style> </head> <body> <div id="app"> <div :class="box">box</div> <div :class="inner">inner1</div> <div :class="inner">inner2</div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ box:'box', inner:'inner' } }) </script> </html>
10.内置指令
指令 说明 v-model 双向数据绑定 v-on 监听事件 v-bind 单向数据绑定 v-text 插入文本内容 v-html 插入包含HTML的内容 v-for 列表渲染 v-if 条件渲染 v-show 显示隐藏 指令简写:v-on可写为@click,v-bind:class可写为:class,v-bind的简写以此类推
11.v-model
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-model</title> <style> </style> </head> <body> <div id="app"> <input type="text" v-model="text" @change="changeData()"> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ text:'' }, methods:{ changeData(){ console.log(this.text) } } }) </script> </html>
可以看到input输入框和data中的text通过v-model双向绑定后input中的值发生改变data中text也会进行改变
12.v-on
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-on</title> <style> </style> </head> <body> <div id="app"> <p>{{text}}</p> <button v-on:click='changeData'>请点击</button> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ text:'点击按钮查看内容' }, methods:{ changeData(){ this.text = '我是v-on:click指令,可简写为@click' } } }) </script> </html>
从页面显示结果可以看出通过v-on指令给button按钮绑定了单击事件,点击之后成功出发了事件。v-on:click可简写为@click
13.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-text</title> <style> </style> </head> <body> <div id="app"> <p v-text="text"></p> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ text:'text' } }) </script> </html>
v-text是在DOM元素中插入文本内容 ,仅仅是文本内容
14.v-html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-html</title> <style> </style> </head> <body> <div id="app"> <p v-html="text"></p> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ text:'<h2>text</h2>' } }) </script> </html>
v-html是在DOM元素中插入HTML标签内容,不仅可以是文本内容,还可以是HTML结构
15.v-bind
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-html</title> <style> </style> </head> <body> <div id="app"> <input type="text" v-bind:value="text"> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ text:'hello world!' } }) </script> </html>
通过v-bind:value数据单向绑定,data中的值改变时页面会自动更新,但是无法通过页面修改data中的值,所以是单向数据绑定
16.v-for
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>v-for</title> <style> </style> </head> <body> <div id="app"> <div v-for="(item,i) in list" :key="i"> <p>索引是{{i}}</p> <p>元素内容是{{item}}</p> </div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> var vm = new Vue({ el:'#app', data:{ list:[1,2,3] } }) </script> </html>
v-for可以实现列表渲染,一般用来循环数组。item表示每一项元素内容,i表示当前元素的索引值