前言:很久之前学过vue,如今开始复习,主要用于自己查看。
1.v-cloak,v-text,v-html,v-on,v-bind
<!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> <script src="./lib/vue-2.4.0.js"></script> <style> [v-cloak] { display: none; } </style></head><body> <!-- 表示vue控制id为app的部分 --> <div id="app"> <!-- 使用v-cloak解决插值表达式闪烁问题 --> <!-- 插值表达式是一个占位符,不会替换整个元素的内容 --> <p v-cloak>{{msg}}</p> <!-- v-text覆盖元素中原本的内容,没有闪烁问题 --> <h4 v-text="msg">000</h4> <!-- 渲染带有html内容,覆盖所有内容 --> <div v-html="msg2">00</div> <!-- 属性绑定指令v-bind,引号里面解析为js代码表达式,简写v-bind:为冒号:--> <input type="button" value="按钮v-bind" v-bind:title="mytitle+msg"> <!-- 事件绑定v-on --> <!-- 错误,alert是原生方法,没有在vue中定义 --> <!-- <input type="button" value="按钮v-on" v-on:click="alert('hello')"> --> <!-- 事件绑定指令v-on,简写v-on:为冒号@--> <input type="button" value="按钮v-on" @click="alert"> </div> <script> var vm = new Vue({ el: '#app',//表示new出来的vue实例,控制页面中的id名为app的html部分 data: { //data属性中,存放的是el属性用到的数据 msg: 'hello world!', msg2: '<h1>带标签的msg</h1>', mytitle: 'hello mytitle' }, methods: { alert: () => { alert('hello!') } }, }) </script></body></html>
2.事件修饰符,stop,prevent,capture,self,once
<!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> <script src="./lib/vue-2.4.0.js"></script></head><body> <!-- 表示vue控制id为app的部分 --> <div id="app"> <!-- <div class="inner" @click="divclick"> --> <!-- 阻止冒泡 --> <!-- <input type="button" @click.stop="inputclick" value="input按钮"> --> <!-- </div> --> <!-- 阻止默认行为,不能跳转 --> <a href="http://www.baidu.com" @click.prevent="preventdefalut">去百度</a> <!-- 捕获触发事件,冒泡事件反过来 --> <!-- <div class="inner" @click.capture="divclick"> <input type="button" @click.stop="inputclick" value="input按钮"> </div> --> <!-- 实现点击当前元素才能触发,.self只会阻止自己身上的冒泡 --> <!-- <div class="inner" @click.self="divclick" style="width:150px;height:150px;background:pink"> <input type="button" @click="inputclick" value="input按钮"> </div> --> <!-- 只触发一次事件处理函数,意思说下面例子只能阻止默认行为一次,下次就会自动跳转 --> <a href="http://www.baidu.com" @click.prevent.once="preventdefalut">去百度</a> </div> <script> var vm = new Vue({ el: '#app',//表示new出来的vue实例,控制页面中的id名为app的html部分 data: { //data属性中,存放的是el属性用到的数据 }, methods: { divclick() { console.log('点击了div') }, inputclick() { console.log('点击了input') }, preventdefalut() { console.log('阻止默认行为') } }, }) </script></body></html>
3.v-model数据双向绑定
<div id="app"> <!-- 只能应用于表单元素,实现表单中的元素和Model中的数据的双向绑定 --> <input type="text" style="width:100%" v-model="msg"> </div> <script> var vm = new Vue({ el: '#app',//表示new出来的vue实例,控制页面中的id名为app的html部分 data: { //data属性中,存放的是el属性用到的数据 msg: "这是v-model例子" }, methods: { } }) </script>
4.v-on的属性绑定的使用--设置样式外联和内联
4.1绑定class属性
<!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> <script src="./lib/vue-2.4.0.js"></script> <style> .red { background-color: red; } .font-weight { font-weight: bold; } .active { font-size: 30px; } </style></head><body> <div id="app"> <!-- 1.使用数组,使用v-bind绑定,注意数组里面加上引号 --> <p :class="['red','font-weight']">这是class</p> <!-- 2.三元表达式,flag在data里面,不用加上引号 --> <p :class="['red','font-weight',flag?'active':'']">这是class</p> <!-- 3.使用对象来处理三元表达式的冗杂问题 --> <p :class="['red','font-weight',{'active':flag}]">这是我class</p> <!-- 4.直接使用对象来处理 --> <p :class="{red:flag,'font-weight':flag,active:flag}">这是对象的class</p> </div> <script> var vm = new Vue({ el: '#app',//表示new出来的vue实例,控制页面中的id名为app的html部分 data: { //data属性中,存放的是el属性用到的数据 flag: true, }, methods: { } }) </script></body></html>
4.2绑定style属性
<!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> <script src="./lib/vue-2.4.0.js"></script> <style> </style></head><body> <div id="app"> <!-- 1.直接采用数组的形式 --> <p :style="msg1">这是绑定的style属性</p> <!--2.多个数组的形式 --> <p :style="[msg1,msg2]">这是绑定的style属性</p> </div> <script> var vm = new Vue({ el: '#app',//表示new出来的vue实例,控制页面中的id名为app的html部分 data: { //data属性中,存放的是el属性用到的数据 msg1: { color: 'red', 'font-weight': 800 }, msg2: { background: 'blue' } }, methods: { } }) </script></body></html>
5.v-for
<body> <div id="app"> <!-- v-for普通数组 --> <!-- <p v-for="item in list">{{item}}</p> --> <!-- v-for对象数组 --> <p v-for="(item,i) in obj" :key="item.id">id是{{item.id}}---name是{{item.name}}--索引是{{i}}</p> <!-- v-for循环对象 --> <!-- <p v-for="(value,key,index) in user">value值{{value}}---key是{{key}}--索引{{index}}</p> --> </div> <script> var vm = new Vue({ el: '#app', data: { list: [0, 1, 2, 3, 4], obj: [ { id: 0, name: 'zs0' }, { id: 1, name: 'zs1' }, { id: 2, name: 'zs2' }, { id: 3, name: 'zs3' } ], user: { name: 'lisi', age: 23, gender: '男' } }, methods: { } }) </script></body>
6.v-if和v-show
<body> <div id="app"> <input type="button" value="v-if和v-show" @click="toggle"> <!-- v-if每次都会重新删除和创建元素,较高的切换性能 --> <p v-if="flag">v-if控制元素</p> <!-- v-show不会重复进行dom操作,只会切换元素的display:none ,较高的初始渲染性能--> <p v-show="flag">v-show控制元素</p> <!-- 如果涉及到频繁的切换,不要使用v-if --> </div> <script> var vm = new Vue({ el: '#app', data: { flag: false }, methods: { toggle() { this.flag = !this.flag } } }) </script></body>