下了班,闲的蛋疼😎,又给新手写了个vue练手项目,直接上代码。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>待办事项应用</title><!-- 引入 Element UI CSS --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><!-- 引入 Vue.js --><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!-- 引入 Element UI JS --><script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<!-- 内联样式 -->
<style>.container {max-width: 600px;margin: 0 auto;padding: 20px;}.task-status {display: flex;justify-content: space-between;align-items: center;padding: 10px;}.center-buttons {display: flex;justify-content: center;}.title{text-align: center;}
</style>
<body><div id="app"><div class="container">、<h1 class=title>待办事项应用</h1><!-- 上半部分 - 输入区域 --><el-input v-model="newTask" placeholder="请输入新的待办事项" @keyup.enter="addTask"><el-button slot="append" icon="el-icon-plus" @click="addTask"></el-button></el-input><!-- 中间部分 - 列表区域 --><el-table :data="filteredTasks" style="width: 100%"><el-table-column prop="title" label="任务" width="180"><template slot-scope="scope"><el-checkbox v-model="scope.row.completed" @change="toggleTask(scope.$index)"></el-checkbox><span :class="{ completed: scope.row.completed }">{{ scope.row.title }}</span></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="mini" type="danger" @click="deleteTask(scope.$index)">删除</el-button></template></el-table-column></el-table><!-- 下半部分 - 任务状态区域 --><div class="task-status"><span>任务总数: {{ filteredTasks.length }}</span><el-button-group class="center-buttons"><el-button type="primary" @click="viewAll">全部</el-button><el-button type="success" @click="viewActive">待办</el-button><el-button type="warning" @click="viewCompleted">已办</el-button></el-button-group></div></div></div><!-- Vue.js 实现逻辑 --><script>new Vue({el: '#app',data: {newTask: '', // 新任务的输入框值tasks: [ // 所有任务的数据{ title: '学习Vue.js', completed: false },{ title: '完成作业', completed: true }],view: 'all' // 当前显示的任务视图},methods: {addTask() { // 添加新任务if (this.newTask.trim()) {this.tasks.push({title: this.newTask,completed: false});this.newTask = ''; // 清空输入框}},deleteTask(index) { // 删除任务this.tasks.splice(index, 1);},toggleTask(index) { // 切换任务状态this.tasks[index].completed = !this.tasks[index].completed;},viewAll() { // 显示所有任务this.view = 'all';},viewActive() { // 显示待办任务this.view = 'active';},viewCompleted() { // 显示已办任务this.view = 'completed';}},computed: {filteredTasks() { // 计算属性来过滤任务if (this.view === 'all') {return this.tasks;} else if (this.view === 'active') {return this.tasks.filter(task => !task.completed);} else if (this.view === 'completed') {return this.tasks.filter(task => task.completed);}}}});</script>
</body>
</html>
以下是本次构建待办事项应用过程中涉及的关键知识点总结
1. 使用 CDN 引入 Vue.js 和 Element UI
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
2. Vue.js 实例
DOM 元素选择器 (el 属性)
指定 Vue 实例挂载到哪个 DOM 元素上。
new Vue({el: '#app',...
});
数据绑定 (data 属性)
定义 Vue 实例的数据对象,用于数据绑定。
data: {newTask: '',tasks: [],view: 'all'
},
计算属性 (computed 属性)
基于其他数据动态计算结果,提高性能。
computed: {filteredTasks() {// 根据当前视图过滤显示的任务}
},
方法 (methods 属性)
定义可复用的方法,用于处理事件。
methods: {addTask() {// 添加新任务},deleteTask(index) {// 删除任务},toggleTask(index) {// 切换任务状态},viewAll() {// 显示所有任务},viewActive() {// 显示待办任务},viewCompleted() {// 显示已办任务}
},
3. Element UI 组件
输入框 (el-input)
用于输入新任务。
<el-input v-model="newTask" placeholder="请输入新的待办事项" @keyup.enter="addTask"><el-button slot="append" icon="el-icon-plus" @click="addTask"></el-button>
</el-input>
表格 (el-table)
用于展示任务列表。
<el-table :data="filteredTasks" style="width: 100%"><el-table-column prop="title" label="任务" width="180"><template slot-scope="scope"><el-checkbox v-model="scope.row.completed" @change="toggleTask(scope.$index)"></el-checkbox><span :class="{ completed: scope.row.completed }">{{ scope.row.title }}</span></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="mini" type="danger" @click="deleteTask(scope.$index)">删除</el-button></template></el-table-column>
</el-table>
按钮 (el-button)
用于执行各种操作,如添加、删除等。
<el-button type="primary" @click="viewAll">全部</el-button>
<el-button type="success" @click="viewActive">待办</el-button>
<el-button type="warning" @click="viewCompleted">已办</el-button>
按钮组 (el-button-group)
用于组合多个按钮。
<el-button-group class="center-buttons"><el-button type="primary" @click="viewAll">全部</el-button><el-button type="success" @click="viewActive">待办</el-button><el-button type="warning" @click="viewCompleted">已办</el-button>
</el-button-group>
4. 响应式设计
5. Vue 指令
-
v-model
用于双向数据绑定。
1<el-input v-model="newTask" ...>
-
v-for
用于循环遍历数据并渲染列表。
1<el-table :data="filteredTasks" ...>
-
v-if / v-show
控制元素的条件渲染。
1<div v-if="condition">...</div>
-
@click / @keyup
用于监听事件。
1<el-button @click="viewAll">全部</el-button>
2<el-input ... @keyup.enter="addTask">
6. CSS 和样式