<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <style> .color{ color: red; } .style{ font-style: italic; } .size{ font-size: 20px; } .weight{ font-weight: bold; } </style></head><body> <div id="app"> <!-- v-clock 解决闪动 --> <div v-clock>{{clockData}}</div> <div v-text="msg">111</div> <div v-html="msg">111</div> <!-- v-bind 绑定属性,缩写: --> <p :title="titleMsg || 'this is my title'">show me</p> <!-- v-on 绑定事件,缩写@ --> <button @click="clickTest">click me</button> <!-- 事件修饰符 --> <!-- .stop 阻止冒泡 --> <div @click="clickFa"> <div @click.stop="clickTest"> <button @click="clickChild">stop child</button> <p>father2</p> </div> <p>father1</p> </div> <!-- .prevent 阻止默认行为 --> <a href="http://www.baidu.com" @click.prevent="clickTest">aaa</a> <!-- .capture 实现捕捉 --> <div @click.capture="clickFa"> <button @click="clickChild">prevent child</button> <p>father</p> </div> <!-- .self 只点击以后元素才触发 并不会对冒泡有本质影响,只是加了.self的那一层只有点击本人时才会触发 --> <div @click="clickFa"> <div @click.self="clickTest"> <button @click="clickChild">self child</button> <p>father2</p> </div> <p>father1</p> </div> <!-- .once 只触发一次 --> <a href="http://www.baidu.com" @click.prevent.once="clickTest">aaaOnce</a><br /> <!-- v-model 双向绑定 --> <!-- 不是双向数据流,只是语法糖 --> 单向绑定<input type="text" :value="inpMsg"> 双向绑定<input type="text" v-model="inpMsg"> <!-- class --> <p :class="['color','size',{'weight':flag}]">show class</p> <p :class="classObj">show class</p> <!-- style --> <p :style="styleObj1">show style</p> <p :style="[styleObj1,styleObj2]">show style</p> <!-- v-for --> <ul> <li v-for="(item,index) in list">{{index}} - {{item}}</li> <li v-for="(val,key,i) in obj">{{key}} : {{val}} -- {{i}}</li> <li v-for="count in 4">{{count}}</li> </ul> <!-- key 惟一标识符 --> <p> <span>val</span> <input type="text" v-model="name"> </p> <button @click="add">ADD</button> <ul> <li v-for="item in valList" :key="item.id"><input type="checkbox">{{item.id}} - {{item.name}}</li> </ul> <!-- v-if(会操作dom)/v-show --> <button @click="change">change flag</button> <p v-show="flag">v-show</p> <p v-if="flag">v-if</p> <!-- computed --> <p>{{fulldata}}</p> </div> <script> var vm = new Vue({ el:'#app', data:{ clockData:'123333', msg:'<h1>222</h1>', titleMsg:'title', inpMsg:'input value', flag:false, classObj:{color:true,style:true,size:true,weight:true}, styleObj1:{color:'red','font-size':'20px'}, styleObj2:{'font-weight':'bold'}, list:[2,4,6,8,10], obj:{a:1,b:2,c:3}, id:3, name:'', valList:[ {id:1,name:'qq'}, {id:2,name:'cc'}, {id:3,name:'sxq'}, ] }, methods: { clickTest(){console.log('click')}, clickFa(){console.log('Fa')}, clickChild(){console.log('child')}, add(){this.valList.unshift({id:++this.id,name:this.name})}, change(){this.flag=!this.flag} }, // 1. 一对多 watch:{ flag:{ // 此写法能够在渲染实现后,就触发一次 handler(newData,oldData){ console.log(newData,oldData,'newData,oldData--') }, immediate:true }, // 或 // 'flag'(newData,oldData){ // console.log(newData,oldData,'newData,oldData--') // } }, // 1. 表白更清晰 // 2. 缓存 // 3. 多对一 computed:{ 'fulldata'(){ return this.id + '---' + this.name; } } }) </script></body></html>