Vue.js是一个流行的JavaScript前端框架,用于构建用户界面和单页应用。它以易学易用、灵活渐进和高性能著称。本文将全面介绍Vue.js的核心概念和基础知识,帮助你快速入门并掌握这一强大的前端框架。
什么是Vue.js?
Vue.js是一个用于构建用户界面的渐进式JavaScript框架。与其他重量级框架不同,Vue被设计为可以逐步采用。Vue的核心库只关注视图层,易于上手,同时与其他库或已有项目整合。
Vue.js的主要特点
- 易学易用:较低的学习曲线,简洁的API
- 渐进式框架:可以根据需求逐步采用Vue的不同部分
- 响应式数据绑定:数据变化时自动更新DOM
- 组件化开发:构建可复用的UI组件
- 虚拟DOM:高效的DOM更新机制
- 轻量级:压缩后约20KB,运行时性能优秀
1. 安装和引入Vue
有多种方式可以在项目中使用Vue:
方法1:通过CDN直接引入
最简单的方式是通过CDN链接直接在HTML中引入Vue:
<!-- 开发环境版本,包含有用的警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<!-- 或者 -->
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
方法2:使用npm安装
如果你使用构建工具(如webpack),可以通过npm安装Vue:
# 安装Vue 2
npm install vue@2
# 安装Vue 3
npm install vue@next
方法3:使用Vue CLI创建项目
Vue CLI是官方提供的项目脚手架工具,可以快速创建一个配置完善的Vue项目:
# 安装Vue CLI
npm install -g @vue/cli
# 创建一个新项目
vue create my-project
# 启动开发服务器
cd my-project
npm run serve
2. Vue实例 - 应用的起点
每个Vue应用都是从创建一个Vue实例开始的:
// Vue 2
const app = new Vue({
el: '#app', // 挂载点(DOM元素)
data: { // 数据
message: '你好,Vue!'
}
});
// Vue 3
const app = Vue.createApp({
data() {
return {
message: '你好,Vue 3!'
}
}
});
app.mount('#app');
Vue实例的主要选项
- el: 指定Vue实例挂载的DOM元素(Vue 2)
- data: 存储应用的数据
- methods: 定义方法
- computed: 计算属性
- watch: 侦听器
- lifecycle hooks: 生命周期钩子函数
- components: 注册组件
3. 模板语法 - 声明式渲染
Vue使用基于HTML的模板语法,允许我们声明式地将DOM绑定到Vue实例的数据。
文本插值
使用双大括号语法(Mustache语法)进行文本插值:
<div id="app">
<p>{{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: '你好,Vue!'
}
});
</script>
当message数据变化时,页面上的文本也会自动更新。
绑定HTML属性
使用v-bind指令绑定HTML属性:
<div id="app">
<a v-bind:href="url">点击访问</a>
<!-- 简写形式 -->
<img :src="imageUrl" :alt="imageAlt">
</div>
<script>
new Vue({
el: '#app',
data: {
url: 'https://vuejs.org',
imageUrl: 'logo.png',
imageAlt: 'Vue Logo'
}
});
</script>
条件渲染
使用v-if、v-else-if和v-else指令进行条件渲染:
<div id="app">
<p v-if="seen">现在你看到我了</p>
<p v-else>我被隐藏了</p>
<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else-if="type === 'C'">C</div>
<div v-else>Not A/B/C</div>
</div>
v-show指令也可以用于条件显示,但它只是切换元素的CSS display属性:
<p v-show="seen">使用v-show的元素始终会被渲染,只是切换显示状态</p>
列表渲染
使用v-for指令基于数组渲染列表:
<div id="app">
<ul>
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</ul>
</div>
<script>
new Vue({
el: '#app',
data: {
items: [
{ id: 1, text: '学习 JavaScript' },
{ id: 2, text: '学习 Vue' },
{ id: 3, text: '创建项目' }
]
}
});
</script>
注意:使用v-for时,建议提供key属性以帮助Vue跟踪每个节点的身份,从而重用和重新排序现有元素。
事件处理
使用v-on指令监听DOM事件:
<div id="app">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">反转消息</button>
<!-- 简写形式 -->
<button @click="reverseMessage">反转消息</button>
</div>
<script>
new Vue({
el: '#app',
data: {
message: '你好,Vue!'
},
methods: {
reverseMessage: function() {
this.message = this.message.split('').reverse().join('');
}
}
});
</script>
事件修饰符:
<!-- 阻止单击事件继续传播 -->
<a @click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form @submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a @click.stop.prevent="doThat"></a>
<!-- 只有在 event.target 是元素本身时才触发处理函数 -->
<div @click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a @click.once="doThis"></a>
表单输入绑定
使用v-model指令在表单元素上创建双向数据绑定:
<div id="app">
<input v-model="message" placeholder="编辑我...">
<p>