| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>插值</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <ul> |
| <li>字符串:{{name}}</li> |
| <li>数值:{{age}}</li> |
| <li>数组:{{list1}}</li> |
| <li>对象:{{obj1}}</li> |
| <li>字符串:{{link1}}</li> |
| <li>运算:{{10+20+30+40}}</li> |
| <li>三目运算符:{{10>20?'是':'否'}}</li> |
| </ul> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| name: 'Darker', |
| age: 18, |
| list1: [1,2,3,4], |
| obj1: {name: 'Darker', age: 19}, |
| link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>' |
| } |
| }) |
| </script> |
| </html> |
指令 |
释义 |
v-html |
让HTML渲染成页面 |
v-text |
标签内容显示js变量对应的值 |
v-show |
放1个布尔值:为真 标签就显示;为假 标签就不显示 |
v-if |
放1个布尔值:为真 标签就显示;为假 标签就不显示 |
v-show与 v-if的区别:
v-show:标签还在,只是不显示了(display: none)
v-if:直接操作DOM,删除/插入 标签
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-html</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <ul> |
| <li v-html="link1"></li> |
| </ul> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>' |
| } |
| }) |
| </script> |
| </html> |
、
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-text</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <ul> |
| <li v-text="link1"></li> |
| </ul> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>', |
| } |
| }) |
| </script> |
| </html> |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-show</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <h3>案例:控件通过按钮来控制显示和小事</h3> |
| <button @click="handleClick()">点我</button> |
| <br> |
| <div v-show="isShow">isShow</div> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| isShow: true, |
| }, |
| methods: { |
| handleClick(){ |
| this.isShow = !this.isShow |
| }, |
| } |
| }) |
| </script> |
| </html> |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-if</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <h3>案例:控件通过按钮来控制显示和消失</h3> |
| <button @click="handleClick()">点我</button> |
| <br> |
| <div v-if="isCreated">isCreated</div> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| isCreated:true |
| }, |
| methods: { |
| handleClick(){ |
| this.isCreated = !this.isCreated |
| }, |
| } |
| }) |
| </script> |
| </html> |
指令 |
释义 |
v-on |
触发事件(不推荐) |
@ |
触发事件(推荐) |
@[event] |
触发event事件(可以是其他任意事件) |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>事件指令</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <button v-on:click="handleClick1">点我1</button> |
| |
| <button @click="handleClick2">点我2</button> |
| |
| <button @click="handleClick3()">点我3-1(带括号)</button> |
| |
| <button @click="handleClick3(1,22,333)">点我3-2(带括号+参数)</button> |
| |
| <button @click="handleClick4($event)">点我4(带事件参数)</button> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| |
| }, |
| methods: { |
| handleClick1() { |
| console.log('点我1') |
| }, |
| handleClick2() { |
| console.log('点我2') |
| }, |
| handleClick3(a,b,c) { |
| console.log(a,b,c) |
| }, |
| handleClick4(event) { |
| console.log(event) |
| }, |
| } |
| }) |
| </script> |
| </html> |
指令 |
释义 |
v-bind |
直接写js的变量或语法(不推荐) |
: |
直接写js的变量或语法(推荐) |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>属性指令</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| <style> |
| .red { |
| color: rgba(255, 104, 104, 0.7); |
| } |
| .purple { |
| color: rgba(104, 104, 255, 0.7); |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <img v-bind:src="url" alt="" height="100"> |
| <br> |
| <button @click="handleClick">点我变色</button> |
| <div :class="isActive?'red':'purple'"> |
| <h1>我是一个div</h1> |
| </div> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| url: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=205441424,1768829584&fm=26&gp=0.jpg', |
| change: 'red', |
| isActive: true |
| }, |
| methods: { |
| handleClick() { |
| this.isActive = !this.isActive |
| }, |
| } |
| }) |
| </script> |
| </html> |
语法
:属性名=js变量/js语法
class:三目运算符、数组、对象{red: true}
style:三目运算符、数组[{backgreound: ‘red’},]、对象{background: ‘red’}
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Style 和 Class</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| <style> |
| .red { |
| color: rgba(255, 104, 104, 0.7); |
| } |
| .font-20 { |
| font-size: 20px; |
| } |
| .be-bold { |
| font-weight: bold; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <p>我是一个普通的p标签</p> |
| <div :class="class_obj"> |
| <p>我是一个不普通的p标签1</p> |
| </div> |
| |
| <button @click="handleClick">点击放大字体</button> |
| <div :style="style_obj"> |
| <p>我是一个不普通的p标签2</p> |
| </div> |
| </div> |
| |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| |
| class_obj: ['red', 'font-20', 'be-bold'], |
| |
| |
| |
| |
| |
| style_obj: { |
| color: 'red', |
| fontSize: '20px' |
| } |
| |
| |
| }, |
| methods: { |
| handleClick(){ |
| this.style_obj['fontSize']='30px' |
| } |
| } |
| |
| }) |
| </script> |
| </html> |
| vm.class_obj.pop() |
| vm.class_obj.pop() |
| vm.class_obj.pop() |
| vm.class_obj.push('be-bold') |
| vm.class_obj.push('red') |
| vm.class_obj.push('font-20') |
指令 |
释义 |
v-if |
相当于: if |
v-else |
相当于:else |
v-else-if |
相当于:else if |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>if、else if、else</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| </head> |
| <body> |
| <div id="box"> |
| <h3>案例:if、else if、else</h3> |
| <h2 v-if="type==='1'">A</h2> |
| <h2 v-else-if="type==='2'">B</h2> |
| <h2 v-else>C</h2> |
| </div> |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| type: '1', |
| } |
| }) |
| </script> |
| </html> |

| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-if + v-for + v-else控制购物车商品的显示</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| <style> |
| table, td { |
| border: 1px solid black; |
| text-align: center; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="box"> |
| <h2>我的购物车</h2> |
| <button @click="show">刷新购物车</button> |
| <br><br> |
| <table v-if="!shopping_car.length==0"> |
| <tr> |
| <td>商品名称</td> |
| <td>价格</td> |
| </tr> |
| <tr v-for="item in shopping_car"> |
| <td>{{item.name}}</td> |
| <td>{{item.price}}</td> |
| </tr> |
| </table> |
| <table v-else> |
| <tr> |
| <td>商品名称</td> |
| <td>价格</td> |
| </tr> |
| <tr> |
| <td>暂无信息</td> |
| <td>暂无信息</td> |
| </tr> |
| </table> |
| </div> |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| isActive: false, |
| shopping_car: [] |
| }, |
| methods: { |
| show() { |
| this.shopping_car = [ |
| {name: 'Threadripper 3990X', price: '29999元'}, |
| {name: 'NVIDIA RTX 8000', price: '59999元'}, |
| {name: 'ROG ZENITH II EXTREME', price: '9999元'}, |
| ] |
| } |
| } |
| }) |
| </script> |
| </html> |

| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>v-for遍历数组(列表)、对象(字典)</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script> |
| <style> |
| table, td { |
| border: 1px solid black; |
| text-align: center; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="box"> |
| <h2>数组(列表)for循环遍历</h2> |
| <ul> |
| <li v-for="(value,index) in list_test">{{index}} —— {{value}}</li> |
| </ul> |
| |
| <h2>对象(字典)for循环遍历</h2> |
| <ul> |
| <li v-for="(value,key) in dic_test">{{key}} —— {{value}}</li> |
| </ul> |
| |
| <h2>数组(列表)套对象(字典)for循环遍历</h2> |
| <table> |
| <tr> |
| <td>姓名</td> |
| <td>年龄</td> |
| <td>性别</td> |
| <td>国籍</td> |
| </tr> |
| <tr v-for="info in summary_test"> |
| <td>{{info.name}}</td> |
| <td>{{info.age}}</td> |
| <td>{{info.gender}}</td> |
| <td>{{info.country}}</td> |
| </tr> |
| </table> |
| </div> |
| </body> |
| <script> |
| let vm = new Vue({ |
| el: '#box', |
| data: { |
| list_test: ['First', 'second', 'Third', 'Forth', 'Fifth'], |
| dic_test:{name: 'Darker', age: 18, gender: 'male'}, |
| summary_test: [ |
| {name: 'Alan', age: 23, gender: 'male', country: 'America'}, |
| {name: 'Ben', age: 15, gender: 'male', country: 'Australia'}, |
| {name: 'Cindy', age: 12, gender: 'female', country: 'Japan'}, |
| {name: 'Darker', age: 18, gender: 'male', country: 'China'}, |
| {name: 'Elisa', age: 26, gender: 'female', country: 'Mexico'}, |
| ] |
| } |
| }) |
| </script> |
| </html> |

注意!在Vue
中:
- 数组的
index
和value
是反的
- 对象的
key
和value
也是反的
vue中使用的是虚拟DOM,会和原生的DOM进行比较,然后进行数据的更新,提高数据的刷新速度(虚拟DOM用了diff算法)
- 在
v-for
循环数组、对象
时,建议在控件/组件/标签
写1个key属性
,属性值唯一
- 页面更新之后,会加速DOM的替换(渲染)
:key="变量"
push:最后位置添加
pop:最后位置删除
shift:第一个位置删除
unshift:第一个位置添加
splice:切片
sort:排序
reverse:反转
filter():过滤
concat():追加另一个数组
slice():
map():
原因:
作者重写了相关方法(只重写了一部分方法,但是还有另一部分没有重写)
| |
| vm.arrayList[0] |
| "Alan" |
| vm.arrayList[0]='Darker' |
| "Darker" |
| |
| |
| Vue.set(vm.arrayList, 0, 'Darker') |
事件 |
释义 |
input |
当输入框进行输入的时候 触发的事件 |
change |
当元素的值发生改变时 触发的事件 |
blur |
当输入框失去焦点的时候 触发的事件 |
change 和 blur 最本质的区别:
如果输入框为空,失去焦点后,change不会触发,但是blur会触发