JavaScript Vue基础
Vue.js简介
Vue.js是一个渐进式JavaScript框架,专注于构建用户界面。它的设计理念是"易学易用",相比于其他大型框架(如Angular、React),Vue更容易上手。Vue的核心库只关注视图层,这使得它非常适合与其他库或已有项目进行整合。
Vue的主要特点
- 渐进式框架:可以逐步采用,从简单应用到复杂单页应用都适用
- 响应式数据绑定:自动更新视图,无需手动操作DOM
- 组件化开发:将UI拆分成可重用的独立组件
- 轻量高效:运行时体积小,渲染性能高
提示
Vue 3是目前的最新稳定版本,本教程主要基于Vue 3进行讲解,但也会提到一些Vue 2的关键差异。
开始使用Vue
安装Vue
有多种方式可以安装Vue:
- 使用CDN
<!-- 开发环境版本,包含完整警告和调试模式 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<!-- 生产环境版本,优化过的大小和速度 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
- 使用npm
npm install vue@next
- 使用Vue CLI
npm install -g @vue/cli
vue create my-vue-project
创建第一个Vue应用
下面是一个简单的Vue应用示例:
<!DOCTYPE html>
<html>
<head>
<title>我的第一个Vue应用</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
<h1>{{ message }}</h1>
<button @click="reverseMessage">反转消息</button>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
message: '你好,Vue!'
}
},
methods: {
reverseMessage() {
this.message = this.message.split('').reverse().join('')
}
}
}).mount('#app')
</script>
</body>
</html>
输出结果:
- 页面显示"你好,Vue!"标题
- 点击按钮后,文本变为"!euV,好你"
Vue实例和生命周期
Vue实例
在Vue 3中,我们使用createApp
函数创建一个Vue应用实例:
const app = Vue.createApp({
// 选项
})
主要选项包括:
data
:存储组件数据methods
:定义组件方法computed
:计算属性watch
:侦听器mounted
、created
等:生命周期钩子
Vue生命周期
Vue组件有一个完整的生命周期,从创建到销毁,我们可以在不同阶段添加自己的代码:
示例代码:
const app = Vue.createApp({
data() {
return {
message: '你好,Vue!'
}
},
created() {
console.log('组件已创建')
},
mounted() {
console.log('组件已挂载到DOM')
},
updated() {
console.log('组件已更新')
},
unmounted() {
console.log('组件已卸载')
}
})
Vue模板语法
Vue使用基于HTML的模板语法,让你可以声明式地将DOM与Vue实例的数据绑定。
文本插值
<div>{{ message }}</div>
绑定HTML属性
<div v-bind:id="dynamicId">动态ID</div>
<!-- 缩写形式 -->
<div :id="dynamicId">动态ID</div>
条件渲染
<div v-if="seen">现在你看到我了</div>
<div v-else-if="condition">另一个条件</div>
<div v-else>其他情况</div>
<!-- v-show只是切换元素的display属性 -->
<div v-show="seen">使用v-show控制显示/隐藏</div>
列表渲染
<ul>
<li v-for="(item, index) in items" :key="item.id">
{{ index }}: {{ item.text }}
</li>
</ul>
警告
在使用v-for时,始终提供:key
属性以帮助Vue高效更新DOM。
事件处理
<button v-on:click="sayHello">点击我</button>
<!-- 缩写形式 -->
<button @click="sayHello">点击我</button>
<!-- 带参数的事件处理 -->
<button @click="greet('World')">问候</button>
Vue指令详解
指令是带有v-
前缀的特殊属性,用于在表达式的值变化时响应式地作用于DOM。
v-model:双向绑定
v-model
指令实现表单输入和应用状态之间的双向绑定:
<input v-model="message">
<p>消息是: {{ message }}</p>
支持多种表单元素:
<!-- 文本框 -->
<input v-model="message" type="text">
<!-- 多行文本 -->
<textarea v-model="message"></textarea>
<!-- 复选框 -->
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
<!-- 单选按钮 -->
<input type="radio" id="one" value="One" v-model="picked">
<input type="radio" id="two" value="Two" v-model="picked">
<!-- 选择框 -->
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
</select>
v-bind:属性绑定
<div v-bind:class="{ active: isActive }">动态类</div>
<div v-bind:style="{ color: activeColor }">动态样式</div>
v-on:事件监听
<!-- 方法处理器 -->
<button v-on:click="doThis"></button>
<!-- 内联语句 -->
<button v-on:click="count++"></button>
<!-- 事件修饰符 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 按键修饰符 -->
<input v-on:keyup.enter="submit">