v-bind : 基本用途是动态更新HTML元素上的属性,比如id、class、src、href、style等
v-on : 绑定事件监听器,做事件交互。v-on+click''、dbclick、keyup、mousemove等
“语法糖”是指在不影响功能的情况下,添加某种方法实现同样的效果,从而方便程序开发。
v-bind ----> :
v-on ----> @
<a v-bind:href="url"> 链接 </a> <img v-bind:src=”imgUrl”> <!-- 缩写为 --> <a :href="url">链接</a> <img :src=”imgUrl”>
<!--v- on 可以直接用"@"来缩写--> <button v-on:click="handleClose">点击隐藏</button> <!--缩写为--> <button @click="handleClose">点击隐藏</button>
计算属性
写在computed中。
<div id=”app” > <div :class=”classes”></div> </div> <script> var app =new Vue({ el :'#app', data : { isActive : true , error : null }, computed: { classes : function () { return { active:this.isActive&&!this.error, 'text-fail':this.error&&this.error.type ==='fail' } } } }) </script>
<div id="app"> <div :class="[activeCls,errorCls]"> </div> <script> var app = new Vue({ el:'#app', data:{ activeCls:'active', errorCls:'error' } }) </script> <!--渲染后的结果为:--> <div class="active error"></div>
<!--三元表达式切换class-->
<div class="[isActive?activeCls:'',errorCls]"></div>
<!--对象语法-->
<div class="[{'active':isActive},errorCls]"></div>
绑定内联样式
v-bind:style (即 :style) 可以给元素绑定内联样式,方法与:class类似,也有对象语法和数组语法,直接在元素上写CSS
CSS属性名称使用驼峰命名(fontSize)或短横分割命名(font-size)
内置指令
v-cloak: 是一个解决初始化慢导致页面闪动的最佳实践,不需要表达式,会在VUE实例结束编译时从绑定的HTML元素上移除 和CSS的display:none;配合使用
<div id="app" v-cloak> {{message}} </div> <script> var app = new Vue({ el: '#app', data: { message:'这是一段文本' } }) </script>
当网络较慢,网页还在加载Vue.js,而导致Vue来不及渲染,这时页面就会显示出Vue源代码。可以用v-cloak来解决闪动问题。
<!-- 搭配使用 --> [v-cloak]{ display:none; }
在简单项目中,使用v-cloak指令是解决屏幕闪动的好办法,但在大型,工程化的项目中(webpack、vue-router)只有一个空的div元素,元素中的内容是通过路由挂载来实现的,这时我们就不需要v-cloak指令咯
v-once 定义该元素或者组件只渲染一次,包括元素或组件的所有子节点。首次渲染后,不再随数据的变化重新渲染,将被视为静态内容。
<div> <ul> <li v-for="book in books">{{book.name}}</li> </ul> </div> <script> var app = new Vue({ el: '#app', data:[ {name:'《Vue.js实战》'}, {name:'《JavaScript语言精粹》'}, {name:'《JavaScript高级程序设计》'} ] }) </script>
<!-- 数组添加索引 -->
<!-- 遍历对象时,可添加键名和索引 -->
<li v-for=”(value , key , index )in user”>{{ index}} - {{book . name })</li>
Vue提供了一个特殊变量$event,用于访问原生DOM事件。
<!-- 阻止链接打开 --> <div> <a href='www.baidu.com' @click='handleClick('禁止打开',$event)'>打开链接</a> </div> <script> var app new Vue({ el:'#app', methods:{ handleClick(){ event . preventDefault() ; window . alert(message); } } }) </script>
v-bind修饰符
<!-- 阻止单击事件冒泡 --> <a @click.stop="handle"></a> <!-- 提交事件不再重载页面 --> <form @submit.prevent = "handle"></form> <!-- 修饰符可以串联 --> <a @click.stop.prevent="handle"></a> <!-- 添加事件侦听器时使用事件捕获模式 --> <div @click.capture="handle"></div> <!-- 只当事件在该元素本身(而不是在子元素)触发时触发回调 --> <div @click.self="handle"></div> <!-- 只触发一次,组件同样适用 --> <div @click.once="handle"></div> <!-- 在表单元素上监听键盘事件时,还可使用按键修饰符 --> <input @keyup.13="submit"> 也可以自己配置具体按键 Vue.config.keyCode.f1 = 112 // 全局定义后,就可以使用@keyup.f1 <!-- Shift + S --> <input @keyup.shift.83 = "handleSave"> <!-- Ctrl + Click --> <div @click.ctrl="doSomething"></div>
表单组件
v-model
用于在表单类 元素上双向数据绑定。表单控件显示的值只依赖所绑定的数据,不再关心初始化时的value属性。
语法糖: @input
单选按钮: :checked="布尔值"
互斥单选按钮,需要v-model和value搭配使用,相同时极为选中。
复选框:v-model=“布尔值” 在勾选时,布尔值会随是否勾选而变化。
选择列表:
<option>是备选项,如果有value属性,v-model就会优先匹配value的值,如果没有,就会匹配<option>的text。
<!-- option 动态输出--> <select v-model="selected" multiple> // multiple可以多选 <option v-for="option in options" :value="option.value">{{options.text}}</option> </select>
v-model修饰符
.lazy: 用于控制数据同步的时机
v-model默认是在input事件中同步输入框的数据,使用修饰符.lazy会转变在change事件中同步。
<input type="text" v-model.lazy="message"> // 这时message并不是实时变化的,而是失焦或按回车键才会更新。
.number 可以将输入转换成Number类型
<input type="number" v-model.number="message">
.trim 可以自动过滤输入的首尾空格
<input type="text" v-model.trim="message">
组件详解
组件(Component)是Vue.js最核心的功能。