Options API:选项式 API改成Composition API:组合式 API的留言板

news2025/1/16 11:43:37

 

让我欢喜让我忧

 

 改成Composition API:组合式 API的代码,

<template>
  <!-- start -->
  <span class="span_checkbox">操作<input type="checkbox" v-model="showInput" value="操作" /></span>
  <div class="textarea_div" v-if="showInput">
    <textarea
      class="LiuYanBan_textarea"
      name="LiuYanBan_textarea"
      rows="1"
      cols="60%"
      placeholder="请输入留言内容"
      v-model="value"
    ></textarea>
    <button @click="sub" class="nav_btn">提交</button>
  </div>
  <nav>
    <ul>
      <sub>虽然有点乱,但也记录了很多新知识</sub>
      <li v-for="(item, index) in msg" :key="index">
        <span v-if="showInput" @click="del(index)" value="删除">删除</span>
        <span v-if="showInput" @click="edit_bianju(index)">编辑</span>
        <span v-show="oindex == index ? true : false">
          <textarea v-model="value"></textarea>
          <button @click="csu">提交</button>
        </span>
        {{ index + 1 }}. {{ item }}
      </li>
    </ul>
  </nav>
  <!-- end -->
</template>
<!-- 这里是script标签的属性,lang="ts"表示使用TypeScript,name="LiuYanBan_cs"表示该script标签的名字,
setup表示该script标签是一个setup函数,可以访问到data、methods、computed、watch等变量。 -->
<script lang="ts" name="LiuYanBan_cs" setup>
import '@/assets/input_checkbox.scss'
import { ref } from 'vue'
let showInput = ref(false)
let value = ref('')
let msg = ref([
  'Options API:选项式 API',
  'Composition API:组合式 API',
  'data:数据',
  'methods:方法',
  'computed:计算',
  'watch:监视',
  'ref:响应式',
  'reactive:响应式',
  'template:模板',
  'props:属性',
  'emit:事件',
  'provide:提供',
  'inject:注入',
  'router:路由'
])
let oindex = ref(-1)
function sub() {
  if (value.value.trim()) {
    msg.value.push(value.value)
    value.value = ''
  }
}
function edit_bianju(index: number) {
  value.value = msg.value[index]
  oindex.value = index
}
function csu() {
  if (oindex.value === -1) {
    return
  }
  msg.value[oindex.value] = value.value
  oindex.value = -1
  value.value = ''
}
function del(index: number) {
  msg.value.splice(index, 1)
  oindex.value = -1
  value.value = ''
}
// function del(index: number) {
//   const newArr = msg.value.slice(0, index).concat(msg.value.slice(index + 1))
//   msg.value = newArr
//   oindex.value = -1
//   value.value = ''
// }
</script>
<style lang="scss" scoped>
.span_checkbox {
  display: inline-block;
  background-color: #e6a23c;
  border-radius: 5px;
  font-size: 1.5rem;
  margin: 20px 0 0 0px;
  input[type='checkbox'] {
    top: 6px;
  }
}
sub {
  margin-left: 20rem;
  color:lightpink;
}
.textarea_div {
  display: inline-block;
  margin: 5px 0px 0px 10px;
  button {
    font-size: 1.5rem;
  }
}
textarea {
  height: 1.5rem;
  font-size: 20px;
  color: aliceblue;
}
ul {
  border-style: solid;
  border-radius: 15px;
  li {
    margin: 10px;
    word-wrap: break-word;
    span {
      cursor: pointer;
      border-style: solid;
      border-width: 3px;
      margin: 5px;
      border-radius: 5px;
      &:hover {
        border-width: 0;
        background-color: #e6a23c;
        color: #ff0000;
      }
      &:active {
        border-width: 0;
        color: #e9f504;
        background-color: #ff0000;
        box-shadow:
          inset -2px -2px 3px rgba(255, 255, 255, 0.6),
          inset 2px 2px 3px rgba(0, 0, 0, 0.6);
      }
    }
  }
}
button:active,
input:active {
  border-width: 0;
  color: #e9f504;
  background-color: #ff0000;
  box-shadow:
    inset -2px -2px 3px rgba(255, 255, 255, 0.6),
    inset 2px 2px 3px rgba(0, 0, 0, 0.6);
}
</style>

 复选框的样式

  /* 复选框样式开始 */
  input[type="checkbox"] {
    margin: 0px 10px;
    -webkit-appearance: none;
    appearance: none;
    width: 25px;
    height: 25px;
    position: relative;
    border-radius: 50%;
    background-color: #ff0000;
    background-image: linear-gradient(to top left,
        rgba(0, 0, 0, 0.2),
        rgba(0, 0, 0, 0.2) 30%,
        rgba(0, 0, 0, 0));
    box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6),
      inset -4px -4px 5px rgba(0, 0, 0, 0.6);
    border: 0px solid black;
    & :hover {
      background: #303745;
    }
    & :active {
      box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6),
        inset 2px 2px 3px rgba(0, 0, 0, 0.6);
    }
  }
  input[type="checkbox"]::after {
    content: "";
    width: 100%;
    height: 100%;
    border: 2px solid #e9f504;
    position: absolute;
    left: -3px;
    top: -3px;
    border-radius: 50%;
    /* 复选框样式开始 */
  }
  /* 设置复选框点击之后的样式*/
  input[type="checkbox"]:checked::after {
    height: 15px;
    width: 25px;
    border-top: none;
    border-right: none;
    border-radius: 0;
    transform: rotate(-45deg);
    transition: all 0.5s ease-in-out;
  }
 /* 设置复选框点击之后的样式结束*/

Options API:选项式 API 

 

<template>
  <!-- start -->
  <div class="row">
    <textarea
      class="LiuYanBan_textarea"
      name="LiuYanBan_textarea"
      rows="1"
      cols="30%"
      placeholder="请输入留言内容"
      v-model="value"
    ></textarea>
    <button @click="sub">提交</button>
  </div>
  <nav>
    <ul>
      <li v-for="(item, index) in msg" :key="index">
        <input type="checkbox" />
        {{ item }}
        <span @click="del(index)">删除</span>
        <span @click="edit_bianju(index)">编辑</span>
        <span v-show="oindex == index ? true : false">
          <textarea v-model="value"></textarea>
          <button @click="csu(index)">重置</button>
        </span>
      </li>
    </ul>
  </nav>
  <!-- end -->
</template>
<script lang="ts">
export default {
  name: 'App',
  data() {
    return {
      value: '',
      msg:  [
  'Options API:选项式 API',
  'Composition API:组合式 API',
  'data:数据',
  'methods:方法',
  'computed:计算',
  'watch:监视',
  'ref:响应式',
  'reactive:响应式',
  'template:模板',
  'props:属性',
  'emit:事件',
  'provide:提供',
  'inject:注入',
  'router:路由'
],
      oindex: -1
    }
  },
  methods: {
    sub() {
      if (this.value.trim()) {
        this.msg.push(this.value)
        this.value = ''
      }
    },
    del(index: number) {
      this.msg.splice(index, 1)
    },
    edit_bianju(index: number) {
      this.value = this.msg[index]
      this.oindex = index
    },
    csu(index: number) {
      this.msg[index] = this.value
      this.oindex = -1
      this.value = ''
    }
  }
}
</script>
<style lang="scss" scoped>
ul {
  background-color: cadetblue;
  padding: 10px;
  border-radius: 10px;
  box-shadow: 0 0 10px;
  /*  倒影 */
  -webkit-box-reflect: below 1px linear-gradient(to bottom, transparent, #f0f0f0);
}
li {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.LiuYanBan_textarea {
  width: 52%;
  border-radius: 5px;
  color: #faf9f9;
  text-shadow: 1px 1px 1px #000;
  font-size: 20px;
  margin-top: 15px;
}
</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1653598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Learning Continuous Image Representation with Local Implicit Image Function

CVPR2021https://github.com/yinboc/liif 问题引入 图像普遍都是使用像素来表示的&#xff0c;而现实世界是连续的&#xff0c;所以本文借鉴3D中neural implicit representation的思想&#xff0c;以连续的方式表示图像&#xff1b;模型输入坐标值和坐标附近的特征&#xff0…

区块链 | NFT 水印:Review on Watermarking Techniques(二)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 半脆弱和可逆水印 鲁棒性好的水印技术通常会产生非常低透明度。正如前面所述&#xff0c;由于透明度在处理数字…

OpenGL 入门(四)—— 贴纸与美颜滤镜

本篇我们来介绍贴纸效果与美颜滤镜的实现。 1、贴纸效果 贴纸实际上是一个图片&#xff0c;用 Bitmap 加载图片后用 OpenGL 渲染到指定的位置上。我们举例添加一个耳朵贴纸&#xff1a; 1.1 获取人脸位置 上一篇我们在讲大眼滤镜时&#xff0c;在 Native 层除了获取到人脸 5…

【数据库表的约束(下)】

文章目录 一、自增长主键二、唯一键约束三、外键约束总结 一、自增长主键 这个约束的功能是&#xff1a; 你不用管我&#xff0c;也不需要插入我这一列的数据&#xff0c;我会保证自己与其他数据不冲突&#xff0c;并且是连续的。 创建一个表&#xff0c;表格内容如下&#x…

Tkinter组件:Checkbutton

Tkinter组件&#xff1a;Checkbutton Checkbutton&#xff08;多选按钮&#xff09;组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像&#xff0c;你可以将一个 Python 的函数或方法与之相关联&#xff0c;当按钮被按下时&#xff0c;对应的函数或方法将被…

保护公司机密:避免员工带着数据说拜拜

公司的核心资产之一就是数据。无论是客户信息、研发代码、内部决议、财务报告、商业合同、设计图纸等都是公司的重要资产。如果这些数据在员工离职时被带走&#xff0c;或在员工在职期间不当行为导致数据泄露&#xff0c;将给公司带来重大损失。 然而&#xff0c;保护这些数据…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;四&#xff09; 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

漏洞伴随App无时不在,该怎么办?

漏洞攻击、加密被破坏以及数据泄露是App面临的三大重要安全风险&#xff0c;无论开发者如何防范&#xff0c;攻击者往往会找到新的方法&#xff0c;并依靠最新的工具来破坏App安全性。 统计数据表明&#xff0c;大约82&#xff05;的漏洞是在App程序代码中发现的。如果尽快发现…

百度百科怎么修改词条

百度百科是一个由网民编辑内容的网络百科全书&#xff0c;支持用户添加或修改词条。以下是关于如何修改百度百科词条的详细步骤和注意事项。 1. 登录百度百科账户 首先&#xff0c;你需要登录到百度百科账户。如果你还没有百度账号&#xff0c;你需要先注册一个。注册完成后&a…

【vue+el-upload】当action=“#“,代表不使用默认上传,使用自定义上传,http-request获取文件流

el-upload有多种上传行为&#xff1a; 1、立即上传&#xff1a; 当 action 属性被赋予一个有效的 URL 时&#xff0c;一旦用户选择了文件&#xff0c;el-upload 组件会立即自动将文件上传到指定的服务器地址。 2、不立即上传&#xff08;自定义触发&#xff09;&#xff1a; 如…

2024-5-3学习笔记 虚拟继承原理

目录 原理 总结 前面提到过&#xff0c;解决菱形继承产生的数据二义性问题和数据冗余&#xff0c;就需要用到虚拟继承&#xff0c;关于它是如何解决的&#xff0c;我们来一起研究。 class Person { public :string _name ; // 姓名 }; class Student : virtual public Perso…

微软exchange邮箱发送

使用java发送exchange类型的邮件&#xff0c;foxmail中配置如下图&#xff1a; 需要的maven依赖如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…

以gitee为例的git入门使用指北

安装git 在linux中我们首先需要使用 sudo apt install git来下载git 在windows中可以下载msysGit 链接&#xff1a;https://git-scm.com/download/win gitee准备 申请账号 建立仓库 ​ 点击新建仓库 这里一般是私有库&#xff0c;点击创建&#xff0c;这时你就拥有一个线上…

LearnOpenGL(九)之材质

一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。在opengl中&#xff0c;我们可以针对每种表面定义不同的材质(Material)属性来模…

Web自动化测试入门:前端页面的组成分析详解!

在进行Web自动化测试时&#xff0c;了解前端页面的组成是非常重要的&#xff0c;因为页面的不同元素和交互会直接影响测试的实施和结果。本文将从0到1详细规范地介绍前端页面的组成。 1. 页面结构 一个典型的前端页面通常由HTML、CSS和JavaScript三部分组成。HTML负责页面的整…

STL速查

容器 (Containers) 图解容器 支持随机访问 stringarrayvectordeque支持支持支持支持 string 类 构造函数 string(); ------创建一个空的字符串 例如: string str;string(const char* s); ------使用字符串s初始化string(const string& str); ------拷贝构造 赋值操作…

Spring中FactoryBean的作用和实现原理

Spring中FactoryBean的作用和实现原理 BeanFactory与FactoryBean&#xff0c;相信很多刚翻看Spring源码的同学跟我一样很好奇这俩货怎么长得这么像&#xff0c;分别都是干啥用的。 BeanFactory是Spring中Bean工厂的顶层接口&#xff0c;也是我们常说的SpringIOC容器&#xff…

pip install flash_attn 报错

目录 报错截图关键问题nvcc -V 查看 cuda 版本查看 usr/local/cuda-* 安装的cuda版本设置 cuda-12.0 &#xff08;添加入环境变量&#xff09;FlashAttention 安装成功 报错截图 ImportError: This modeling file requires the following packages that were not found in you…

OSPF Stub区域

原理概述 OSPF 协议定义了多种区域&#xff08; Area &#xff09;类型&#xff0c;其中比较常见的有 Stub 区域和 Totally Stub 区域。区域的类型决定了在这个区域当中所存在的 LSA 的类型。 Stub 区域不允许 Type-4和 Type-5 LSA 进入&#xff0c;该区域会通过 Type-3 LSA…

Elasticsearch中的三种分页策略深度解析:原理、使用及对比

码到三十五 &#xff1a; 个人主页 在Elasticsearch中&#xff0c;分页是查询操作中不可或缺的一部分。随着数据量的增长&#xff0c;如何高效地分页查询数据急需需要面对的问题。Elasticsearch提供了三种主要的分页方式&#xff1a;from size、scroll和search_after。下面详细…