Vue 项目实战1-学习计划表

2024-08-26 08:44

本文主要是介绍Vue 项目实战1-学习计划表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue 项目实战1-学习计划表


一、大致实现思路

1. 页面结构设计
    使用 Element UI 的 `el-card`、`el-form`、`el-table` 等组件来构建页面的基本结构。
    使用 `el-row` 和 `el-col` 来实现水平布局。

2. 数据模型

   使用 Vue 的数据模型来存储学习计划的信息,如 `newPlan` 和 `plans` 数组。
  `newPlan` 用于暂存新添加的学习计划信息。
   `plans` 用于存储所有已添加的学习计划。

3. 表单交互
    使用 `el-form` 和 `el-form-item` 来创建表单,并使用 `v-model` 来实现双向数据绑定。
    使用 `el-input` 和 `el-select` 来创建输入框和下拉选择器。
    使用 Element UI 的表单验证功能 (`:rules`) 来确保所有必填字段都已被填写。

4. 添加学习计划
   使用 `el-button` 创建“添加”按钮,并通过点击事件触发 `addPlan` 方法。
   在 `addPlan` 方法中,先验证表单数据的有效性,然后将新计划添加到 `plans` 数组中。

5. 展示学习计划
   使用 `el-table` 来展示所有的学习计划。
   使用 `v-for` 循环遍历 `plans` 数组,并为每条记录创建一个表格行。

6.完成状态切换
   在表格的“完成状态”列中,使用 `el-switch` 组件来表示完成状态,并通过 `v-model` 实现双向绑定。

7. 删除学习计划
   在表格的“操作”列中,使用 `el-button` 创建“删除”按钮,并通过点击事件触发 `deletePlan` 方法。
   在 `deletePlan` 方法中,根据选中的行的索引从 `plans` 数组中移除该记录。


二、关键知识点

1. Vue 2 基础
     数据绑定 (`v-model`): 双向数据绑定机制。
     条件渲染 (`v-if`, `v-show`): 控制元素的显示和隐藏。
     列表渲染 (`v-for`): 遍历数组并生成 DOM 元素。
     事件处理 (`@click`, `@submit.prevent`): 监听用户事件并执行相应操作。
     计算属性 (`computed`): 用于定义依赖于其他数据的属性。
     方法 (`methods`): 执行复杂的逻辑或操作。

2.Element UI
     `el-card`: 用于创建卡片容器。
     `el-form` 和 `el-form-item`: 用于创建表单和表单项。
     `el-input`: 输入框组件。
     `el-select`: 下拉选择器组件。
      `el-table`: 表格组件。
      `el-switch`: 开关组件。
      `el-button`: 按钮组件。
      `el-row` 和 `el-col`: 用于创建栅格系统。

3. CSS 样式
     使用内联样式或外部样式表来美化界面。
    使用 Flexbox 或 Grid 布局来实现复杂布局。

4. 表单验证
     使用 Element UI 的内置表单验证功能。
     定义验证规则 (`:rules`) 并在提交前进行验证。


三、使用vue+element-ui实现一个"学习计划表"

<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>

1.在这里我们在HTML中使用cdn引入vue,这样便于更好偷懒。


<div id="app"><el-card class="box-card"><div slot="header"><h1>学习计划表</h1></div><el-form :model="newPlan" ref="form" label-width="80px" :rules="rules"><el-row :gutter="20"><el-col :span="8"><el-form-item label="学习科目" prop="subject"><el-input v-model="newPlan.subject"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="学习内容" prop="content"><el-input v-model="newPlan.content"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="学习地点" prop="location"><el-select v-model="newPlan.location" placeholder="请选择"><el-option label="自习室" value="自习室"></el-option><el-option label="图书馆" value="图书馆"></el-option><el-option label="宿舍" value="宿舍"></el-option></el-select><el-form-item><el-button type="primary" @click="addPlan" style="margin-left: 255px;margin-top:-40px ;">添加</el-button></el-form-item></el-form-item></el-col></el-row></el-form></el-card><el-table :data="plans" style="width: 100%"><el-table-column prop="subject" label="学习科目" width="180"></el-table-column><el-table-column prop="content" label="学习内容" width="180"></el-table-column><el-table-column prop="location" label="学习地点" width="180"></el-table-column><el-table-column label="完成状态" width="180"><template slot-scope="scope"><el-switch v-model="scope.row.completed" active-text="已完成" inactive-text="未完成"></el-switch></template></el-table-column><el-table-column label="操作" width="180"><template slot-scope="scope"><el-button type="danger" size="small" @click="deletePlan(scope.$index)" :disabled="!scope.row.completed">删除</el-button></template></el-table-column></el-table>
</div>

2.模板语法 ,写出项目的结构


new Vue({el: '#app',data() {return {newPlan: {subject: '',content: '',location: ''},plans: [],rules: {subject: [{ required: true, message: '请输入学习科目', trigger: 'blur' }],content: [{ required: true, message: '请输入学习内容', trigger: 'blur' }],location: [{ required: true, message: '请选择学习地点', trigger: 'change' }]}}},methods: {addPlan() {this.$refs.form.validate(valid => {if (valid) {this.plans.push({ ...this.newPlan, completed: false });this.newPlan = { subject: '', content: '', location: '' };}});},deletePlan(index) {this.plans.splice(index, 1);}}});

3.进行数据渲染


完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>学习计划表</title><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><script src="https://cdn.jsdelivr.net/npm/vue@2"></script><script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
<div id="app"><el-card class="box-card"><div slot="header"><h1>学习计划表</h1></div><el-form :model="newPlan" ref="form" label-width="80px" :rules="rules"><el-row :gutter="20"><el-col :span="8"><el-form-item label="学习科目" prop="subject"><el-input v-model="newPlan.subject"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="学习内容" prop="content"><el-input v-model="newPlan.content"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="学习地点" prop="location"><el-select v-model="newPlan.location" placeholder="请选择"><el-option label="自习室" value="自习室"></el-option><el-option label="图书馆" value="图书馆"></el-option><el-option label="宿舍" value="宿舍"></el-option></el-select><el-form-item><el-button type="primary" @click="addPlan" style="margin-left: 255px;margin-top:-40px ;">添加</el-button></el-form-item></el-form-item></el-col></el-row></el-form></el-card><el-table :data="plans" style="width: 100%"><el-table-column prop="subject" label="学习科目" width="180"></el-table-column><el-table-column prop="content" label="学习内容" width="180"></el-table-column><el-table-column prop="location" label="学习地点" width="180"></el-table-column><el-table-column label="完成状态" width="180"><template slot-scope="scope"><el-switch v-model="scope.row.completed" active-text="已完成" inactive-text="未完成"></el-switch></template></el-table-column><el-table-column label="操作" width="180"><template slot-scope="scope"><el-button type="danger" size="small" @click="deletePlan(scope.$index)" :disabled="!scope.row.completed">删除</el-button></template></el-table-column></el-table>
</div><script>new Vue({el: '#app',data() {return {newPlan: {subject: '',content: '',location: ''},plans: [],rules: {subject: [{ required: true, message: '请输入学习科目', trigger: 'blur' }],content: [{ required: true, message: '请输入学习内容', trigger: 'blur' }],location: [{ required: true, message: '请选择学习地点', trigger: 'change' }]}}},methods: {addPlan() {this.$refs.form.validate(valid => {if (valid) {this.plans.push({ ...this.newPlan, completed: false });this.newPlan = { subject: '', content: '', location: '' };}});},deletePlan(index) {this.plans.splice(index, 1);}}});
</script>
</body>
</html>

这篇关于Vue 项目实战1-学习计划表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108091

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...