##v-cloak v-text v-html v-bind v-on的使用
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"/> 7 <title>Document</title> 8 <script src="lib/vue.js"></script> 9 <style type="text/css"> 10 [v-cloak]{ 11 display: none; 12 } 13 </style> 14 </head> 15 <body> 16 <div id="app"> 17 <!-- 使用v-cloak可以解决 插值表达式闪烁的问题 --> 18 <p v-cloak>{{ msg }}</p> 19 <h4 v-text="msg"></h4> 20 <!-- 默认v-text是没有闪烁问题的 --> 21 <!-- v-tsxt会覆盖元素中原本的内容,但是插值表达式只会替换自己的这个占位符,不会把整个元素的内容清空 --> 22 <div v-html="msg2"></div> 23 <!-- v-html也会覆盖元素中原本的内容,会把目标内容按html格式解析 --> 24 25 26 <!-- <input type="button" value="按钮" v-bind:title="mytitle + ‘123‘" /> --> 27 <!-- v-bind:是vue中提供的用于绑定属性的指令,就是告诉title要把mytitle当成变量处理,而不是普通字符串,缩写是 : --> 28 <!-- v-bind中可以写合法的JS表达式 --> 29 30 <input type="button" value="按钮" @click="show" /> 31 <!-- vue中提供了 v-on: 事件绑定机制 缩写是 @ --> 32 </div> 33 34 <script type="text/javascript"> 35 var vm = new Vue({ 36 el:‘#app‘, 37 data:{ 38 msg:‘123‘, 39 msg2:‘<h1>hhhhh</h1>‘, 40 mytitle:‘这是一个自己定义的title‘ 41 }, 42 methods:{ //这个methods属性中定义了当前vue实例所有可用的方法 43 show:function(){ 44 alert(‘hello‘) 45 } 46 } 47 }) 48 49 50 </script> 51 </body> 52 </html>
##跑马灯的简单实现
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"/> 7 <title>Document</title> 8 <!-- 1.导入vue包 --> 9 <script src="lib/vue.js"></script> 10 </head> 11 <body> 12 <div id="app"> 13 <h4>{{ msg }}</h4> 14 <input type="button" value="浪起来" @click="lang"/> 15 <input type="button" value="别浪" @click="stop"/> 16 17 </div> 18 <!-- 2.创建一个要控制的区域 --> 19 <script type="text/javascript"> 20 //注意:在vm实例中如果想要获取data上的数据或者想调用methods中的方法,必须通过this.数据属性名或this.方法名来进行访问, 21 // 这里的this,就表示我们new出来的vm实例对象 22 var vm = new Vue({ 23 el:‘#app‘, 24 data:{ 25 msg:‘猥琐发育,别浪~~!‘, 26 intervalId:null //在 data上定义定时器Id 27 }, 28 methods:{ 29 lang(){ 30 if(this.intervalId != null)return; 31 //判定,避免每次点击都重新开启一个定时器 32 this.intervalId = setInterval( () => { //定时器 33 // => 箭头函数,让内部的this与外部的vm实例保持一致,避免访问不到vm实例中的数据 34 //获取到头的第一个字符 35 var start = this.msg.substring(0,1) 36 //获取到后面的所有字符 37 var end = this.msg.substring(1) 38 //重新拼接得到新的字符串,并赋值给this.msg 39 this.msg = end + start 40 },400) 41 42 43 //注意:vm实例会监听自己身上data中的数据改变,只要数据一发生改变,就会自动把最最新的数据从data上同步到页面中 44 // 程序员只需要关心数据,不用考虑怎样重新渲染dom 45 }, 46 stop(){ //停止计时器 47 clearInterval(this.intervalId) 48 this.intervalId = null; 49 //每当清除了定时器之后需要吧intervalId置为null,否则无法再次开启定时器 50 } 51 } 52 53 }) 54 55 // 分析: 56 // 1.给[浪起来]按钮绑定一个点击事件 57 // 2.按钮的时间处理函数中写相关的业务逻辑代码:拿到msg字符串,然后调用字符串的substring方法进行字符串的截取操作,吧第一个字符截取出来放到最后一个位置 58 // 3.为了实现点击一下按钮自动截取的功能,需要把步骤2中的代码放到一个定时器中 59 </script> 60 </body> 61 </html>
##事件修饰符
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"/> 7 <title>Document</title> 8 <script src="lib/vue.js"></script> 9 <style type="text/css"> 10 .inner{ 11 height: 150px; 12 background-color: darkcyan; 13 } 14 </style> 15 </head> 16 <body> 17 <div id="app"> 18 <!-- <div class="inner" @click="div1Handler"> 19 <input type="button" value="戳他" @click.stop="btnHandler"/> 20 使用 .stop 阻止冒泡(多层元素从里到外依次触发事件) 21 </div> --> 22 23 <!-- <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a> 24 使用 .prevent 阻止默认行为 --> 25 26 <!-- <div class="inner" @click.capture="div1Handler"> 27 <input type="button" value="戳他" @click="btnHandler"/> 28 使用 .capture 实现捕获事件的触发机制 29 </div> --> 30 31 <!-- <div class="inner" @click.self="div1Handler"> 32 <input type="button" value="戳他" @click="btnHandler"/> 33 使用 .self 实现只有点击当前元素时才会触发事件处理函数,阻止自身的冒泡行为(不阻止其他元素的冒泡), 34 </div> --> 35 36 <!-- <a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a> 37 使用 .once 实现只触发一次事件处理函数 38 --> 39 </div> 40 <script type="text/javascript"> 41 var vm = new Vue({ 42 el:‘#app‘, 43 data:{ }, 44 methods:{ 45 // div1Handler(){ 46 // console.log(‘这是触发 inner div的点击事件‘) 47 // }, 48 // btnHandler(){ 49 // console.log(‘这是触发了 btn按钮的点击事件‘) 50 // } 51 linkClick(){ 52 console.log(‘触发了链接的点击事件‘) 53 } 54 } 55 }); 56 </script> 57 </body> 58 </html>
##v-model指令实现双向数据绑定
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"/> 7 <title>Document</title> 8 <script src="lib/vue.js"></script> 9 </head> 10 <body> 11 <div id="app"> 12 <p>{{ msg }}</p> 13 <!-- <input type="text" :value="msg" style="width: 100%;"/> --> 14 <!-- v-bind只能实现单向数据绑定,从M自动到绑定到V,无法实现双向数据绑定 --> 15 16 <input type="text" v-model="msg" style="width: 100%;"/> 17 <!-- 使用 v-model 指令可以实现双向数据绑定 18 注意:只能用于 表单元素(能与用户实现交互的元素)中 --> 19 </div> 20 <script type="text/javascript"> 21 var vm = new Vue({ 22 el:‘#app‘, 23 data:{ 24 msg:‘大家都是好boy‘ 25 }, 26 methods:{ 27 28 } 29 }) 30 </script> 31 </body> 32 </html>
原文:https://www.cnblogs.com/edward-life/p/10750135.html