1. Vue.js 核心特性概览
Vue.js 是一款轻量级、高性能的渐进式前端框架,核心优势包括:
- 响应式数据绑定:通过
data
属性实现视图自动更新 - 组件化开发:提升代码复用性与可维护性
- 轻量高效:核心库仅 20KB,支持按需引入
2. 基础入门:从数据绑定到组件
2.1 响应式数据绑定
<template>
<div>
<p>{{ message }}</p>
<button @click="updateMessage">更新消息</button>
</div>
</template>
<script>
export default {
data() {
return { message: 'Hello Vue!' };
},
methods: {
updateMessage() {
this.message = 'Hello World!'; // 数据变化触发视图更新
}
}
};
</script>
2.2 模板语法进阶
指令 | 说明 | 示例代码 |
---|---|---|
v-if | 条件渲染 | <div v-if="isLogin">欢迎用户</div> |
v-for | 列表渲染 | <li v-for="item in list">{{ item }}</li> |
v-model | 双向数据绑定 | <input v-model="username" /> |
v-bind | 属性绑定(简写 : ) | <img :src="imageUrl" /> |
2.3 组件化开发实践
父子组件通信示例
<!-- Parent.vue -->
<template>
<ChildComponent :msg="parentMsg" @update="handleUpdate" />
</template>
<script>
import ChildComponent from './Child.vue';
export default {
components: { ChildComponent },
data() { return { parentMsg: '初始值' } },
methods: {
handleUpdate(newVal) {
this.parentMsg = newVal;
}
}
};
</script>
<!-- Child.vue -->
<template>
<div>
<p>{{ msg }}</p>
<button @click="$emit('update', '子组件更新')">更新</button>
</div>
</template>
<script>
export default {
props: { msg: String }
};
</script>
3. 进阶技巧:性能优化与状态管理
3.1 计算属性 vs 侦听器
特性 | 计算属性(Computed) | 侦听器(Watchers) |
---|---|---|
依赖 | 多个响应式数据 | 单个响应式数据 |
缓存 | 自动缓存(依赖不变不更新) | 无缓存(每次变化都触发) |
适用场景 | 复杂数据计算(如商品总价) | 异步操作(如搜索请求防抖) |
3.2 Vuex 状态管理实战
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: { count: 0 },
mutations: {
increment(state) { state.count++; },
decrement(state) { state.count--; }
},
actions: {
asyncIncrement({ commit }) {
setTimeout(() => commit('increment'), 1000);
}
}
});
<!-- Counter.vue -->
<template>
<div>
<p>计数:{{ $store.state.count }}</p>
<button @click="$store.commit('increment')">+</button>
<button @click="$store.dispatch('asyncIncrement')">异步+</button>
</div>
</template>
4. 实战案例:完整项目开发
4.1 TodoList 实现
<template>
<div class="todo-list">
<input
v-model="newTodo"
@keyup.enter="addTodo"
placeholder="添加新任务..."
/>
<ul>
<li
v-for="(todo, index) in todos"
:key="index"
:class="{ completed: todo.done }"
>
{{ todo.text }}
<button @click="toggleTodo(index)">切换状态</button>
<button @click="deleteTodo(index)">删除</button>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
newTodo: '',
todos: [
{ text: '学习 Vue', done: false },
{ text: '练习实战', done: true }
]
};
},
methods: {
addTodo() {
if (this.newTodo) {
this.todos.push({ text: this.newTodo, done: false });
this.newTodo = '';
}
},
toggleTodo(index) {
this.todos[index].done = !this.todos[index].done;
},
deleteTodo(index) {
this.todos.splice(index, 1);
}
}
};
</script>
<style scoped>
.completed {
text-decoration: line-through;
color: #aaa;
}
</style>
4.2 路由配置与导航
// router.js
import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
export default new VueRouter({
mode: 'history',
routes
});
5. 性能优化与最佳实践
- 组件缓存:使用
<keep-alive>
缓存不活动组件 - 异步组件:通过
defineAsyncComponent
优化首屏加载import { defineAsyncComponent } from 'vue'; const AsyncComponent = defineAsyncComponent(() => import('./components/Async.vue'));
- 虚拟滚动:使用
vue-virtual-scroller
处理大数据量列表 - 代码分割:通过 Webpack 实现按需加载
6. 总结与扩展学习
通过本文,你已掌握:
- Vue.js 基础语法与组件化开发
- 响应式数据处理(计算属性、侦听器)
- 状态管理(Vuex)与路由配置
- 完整项目开发流程与性能优化技巧
扩展学习推荐:
本文由 [码说数字化] 原创,转载请注明出处。