当前位置: 首页 > backend >正文

初学Vue之记事本案例

初学Vue之记事本案例

  • 案例功能需求
  • 相关Vue知识
  • 案例实现
    • 1.实现方法及代码
    • 2.演示
  • 案例收获与总结

案例功能需求

基于Vue实现记事功能(不通过原生JS实现)

1.点击保存按钮将文本框的内容显示在特定位置,且清空文本框内容
2.点击清空按钮,将文本框内容清空,并把计数归0
3.能够对增添的每条信息进行删除操作,并依次递增有序排列

相关Vue知识

(一)选项式API的核心选项
1.data():定义组件的状态即响应式数据
2.methods:定义组件内的方法
3.computed:计算属性,返回数据

(二)指令
1.v-for:渲染列表指令,可以基于数组、对象重复生成元素
2.v-on:绑定事件监听器指令,监听点击、键盘输入等事件
3.v-model:双向数据绑定

(三)文本插值
通过双大括号将数据插入Html页面中

案例实现

1.实现方法及代码

(一)通过给文本框添加v-model=”msg“指令,进行数据的双向绑定,msg就成为了文本框中输入的内容。
保存功能:添加v-on指令,指定实现方法save。对msg进行判断,若不为空则通过.push()将其添加在已经创建的数组后,进行页面的渲染(基于v-for指令)
清空功能:依旧添加v-on指令,指定实现方法del。将msg的值设为空(由于msg空,因而计数值为0)

(二)删除功能:通过findIndex()遍历存储信息的数组,找到要删除信息的下标,通过splice()进行删除

(三)计数实现:通过computed属性,返回msg的长度

(四)信息的渲染:通过对li添加v-for指令,并将数组存储的id作为key

(五)细节处理:1.对文本框添加修饰符@keyup.enter,指定实现方法,实现回车进行保存。2.在保存的判断中,若为空,则弹出弹框显示输入为空

整合代码:(html、css、js全为一个文件)

<template><div class="dd1"><h1>记事本</h1><div><div class="d2"><textarea name="" id="" v-model="msg" @keyup.enter="save" placeholder="记录生活每一天"></textarea><label for="" class="lab_01">{{cou}}/200字</label></div><span><button @click="save">保存</button><label for="" @click="del">清空</label></span></div><div class="dd2"><ol ><li v-for="item in list" :key="item.id" >{{item.contextid}}<input type="submit" value="删除" @click="del1(item.contextid)"></li></ol></div></div>
</template><script>console.log(new Date())export default {data() {return {msg:"",list:[{id:new Date() ,contextid:'VUE创始人'},{id:new Date(),contextid:'渐进式框架'}]}},methods:{del1(contextid){const l1=this.list.findIndex(item=>item.contextid === contextid)this.list.splice(l1,1)},save(){if(this.msg.trim()!==""){this.list.push({id:new Date(),contextid:this.msg})this.msg=""}else{alert('输入为空')}},del(){this.msg=""}},computed:{cou(){return this.msg.length}}}
</script><style>*{margin: 0;padding: 0;}h1{text-align: center;}.dd1{border-radius: 30px;background-color: rgb(201, 196, 196);width: 350px;height: 505px;margin: 20px auto;}.dd2{border-radius: 20px;background-color: rgb(231, 173, 173,0.5);width: 90%;height: 275px;margin: 3px auto;overflow-x:hidden ;overflow-y: auto;padding-left: 30px;padding-top: 5px;}.d2{position: relative}textarea{resize: none;display: block;margin: 10px auto;width: 330px;height: 120px;font-size: 20px;outline: none;}button{margin: 0 40%;margin-right: 0;width: 50px;height: 30px;font-size: 17px;}label{margin-left: 5px;cursor: pointer;}label:hover{color: red;}ol{display: block;font-size: 17px;margin-left: 5px;}ol li{position: relative}input{opacity: 0;position: absolute;left: 87%;background-color: rgb(8, 126, 216,0.3);}ol li:hover input{opacity: 1;}.lab_01{font-size: 15px;position: absolute;left: 75.5%;top: 77%;}.lab_01:hover{color: black;cursor:auto}
</style>

2.演示

首页
在这里插入图片描述
保存
在这里插入图片描述
删除
在这里插入图片描述

案例收获与总结

1.当前的Vue3支持选项式API以及组合式API,二者具有显著区别。组合式是Vue3的新特性,二者具有各自的优缺点。(不展开)

2.v-on指令可以缩写成@ (@click="f1"或v-on:click=“f1”)

3.使用v-for指令,若写了index,就要在key中用到,否则页面会发生报错

4.使用修饰符@keyup.enter监听回车事件,能够提高开发速度,若通过普通方法实现,需要对e进行判断

5.若想直观的感受v-model的双向数据绑定,可以下载相应的插件、扩展进行调试

http://www.xdnf.cn/news/3382.html

相关文章:

  • 【Linux】VSCode用法
  • 【嵌入式———通用定时器基本操作——实验需求2:案列:测量PWM的频率/周期】
  • 用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]
  • 构建现代分布式云架构的三大支柱:服务化、Service Mesh 与 Serverless
  • 第十一届蓝桥杯 2020 C/C++组 门牌制作
  • vue 常见ui库对比(element、ant、antV等)
  • 兰亭妙微:数据驱动的 B 端设计:如何用 UI 提升企业级产品体验?
  • 【Qt】网络
  • ZYNQB笔记(十六):AXI DMA 环路测试
  • FreeSWITCH 发送 sip message 的 lua 程序
  • 深挖Java基础之:变量与类型
  • 总结C++中的STL
  • 分布式事务,事务失效,TC事务协调者
  • 图数据库榜单网站
  • 算法每日一题 | 入门-顺序结构-字母转换
  • X²+1素数问题
  • DirectX12(D3D12)基础教程七 深度模板视图\剔除\谓词
  • 【数据结构与算法】跳表实现详解
  • Windows结合WSL之ext4.vhdx不断增大问题
  • 第九节:文件操作
  • C++漫游指南——字符串篇与内存分配篇
  • ganesha-DBUS
  • 人形机器人的 “灵动密码”:动作捕捉与 AI 如何为其注入活力
  • BOSS的收入 - 华为OD机试(A卷,Java题解)
  • React-Native Android 多行被截断
  • Ubuntu 22.04 的 ROS 2 和 Carla 设置指南(其一)
  • Multicore-TSNE
  • 如何用GPU Instancing来优化树木草石重复模型
  • Kubernetes 配置中的 Selector 详解
  • GPU集群搭建步骤