主题
核心语法
1. 模板语法
文本插值
vue
<span>Message: {{ msg }}</span>
原始HTML
vue
<div v-html="rawHtml"></div>
属性绑定
vue
<div v-bind:id="dynamicId"></div>
<!-- 缩写 -->
<div :id="dynamicId"></div>
2. 条件渲染
v-if
vue
<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else>C</div>
v-show
vue
<div v-show="isShow">显示或隐藏</div>
3. 列表渲染
基础用法
vue
<ul>
<li v-for="(item, index) in items" :key="index">
{{ item.message }}
</li>
</ul>
对象遍历
vue
<ul>
<li v-for="(value, key, index) in object" :key="key">
{{ index }}. {{ key }}: {{ value }}
</li>
</ul>
4. 事件处理
基础用法
vue
<button v-on:click="counter += 1">Add</button>
<!-- 缩写 -->
<button @click="counter += 1">Add</button>
事件修饰符
vue
<!-- 阻止单击事件继续传播 -->
<a @click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form @submit.prevent="onSubmit"></form>
<!-- 键修饰符,按下enter时触发 -->
<input @keyup.enter="submit">
5. 表单输入绑定
v-model基础用法
vue
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
不同表单类型
vue
<!-- 文本框 -->
<input v-model="message">
<!-- 多行文本 -->
<textarea v-model="message"></textarea>
<!-- 复选框 -->
<input type="checkbox" v-model="checked">
<!-- 单选按钮 -->
<input type="radio" v-model="picked" value="One">
<!-- 选择框 -->
<select v-model="selected">
<option v-for="option in options" :value="option.value">
{{ option.text }}
</option>
</select>
6. 计算属性和侦听器
计算属性
vue
<script>
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
}
},
computed: {
fullName() {
return this.firstName + ' ' + this.lastName
}
}
}
</script>
侦听器
vue
<script>
export default {
data() {
return {
question: ''
}
},
watch: {
question(newValue, oldValue) {
// 值变化时执行
this.handleQuestionChange()
}
}
}
</script>
7. Class与Style绑定
Class绑定
vue
<!-- 对象语法 -->
<div :class="{ active: isActive, 'text-danger': hasError }"></div>
<!-- 数组语法 -->
<div :class="[activeClass, errorClass]"></div>
Style绑定
vue
<!-- 对象语法 -->
<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
<!-- 数组语法 -->
<div :style="[baseStyles, overridingStyles]"></div>
8. 生命周期钩子
vue
<script>
export default {
beforeCreate() {
// 实例初始化之后,数据观测和事件配置之前
},
created() {
// 实例创建完成后被立即调用
},
beforeMount() {
// 挂载开始之前被调用
},
mounted() {
// 实例被挂载后调用
},
beforeUpdate() {
// 数据更新时调用
},
updated() {
// 数据更改导致的虚拟DOM重新渲染后调用
},
beforeDestroy() {
// 实例销毁之前调用
},
destroyed() {
// 实例销毁后调用
}
}
</script>
注意事项
- v-if vs v-show:v-if是"真正"的条件渲染,v-show只是CSS display的切换
- key的重要性:在v-for中使用key可以优化虚拟DOM的更新
- 计算属性vs方法:计算属性有缓存,方法每次都会执行
- v-model的修饰符:.lazy, .number, .trim的合理使用
- 生命周期钩子中的this指向:指向当前Vue实例