vue 使用数组splice方法失效,且总是删除最后一项的解决办法。[通俗易懂]

vue 使用数组splice方法失效,且总是删除最后一项的解决办法。[通俗易懂]今天在写项目的时候,遇到一个很简单的需求,下图,点击添加标签,左边出现一个可以输入的标签,点击删除按钮,就能删除当前标签,很简单的需求,我却搞了一个多小时(哎…新手愚笨啊)一看到这个我的思路就是点击添加标签,把新增的节点push到自己定义的数组里,然后渲染出来,点击删除按钮,用splice方法从数组中删除掉当前的节点(很简单,很明确的思路嘛,但是却事与愿违) <div…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

今天在写项目的时候,遇到一个很简单的需求,下图,点击添加标签,左边出现一个可以输入的标签,点击删除按钮, 就能删除当前标签,很简单的需求,我却搞了一个多小时(哎…新手愚笨啊)
今天在写项目的时候
一看到这个我的思路就是点击添加标签,把新增的节点push到自己定义的数组里,然后渲染出来,点击删除按钮,用splice方法从数组中删除掉当前的节点(很简单,很明确的思路嘛,但是却事与愿违)

		<div 
             class="addtag"
              v-for="(i,index) in tags"
              :key="i.index"
          >
	         <div v-html="i.tag" class="tags">{
  
  {i.tag}}</div>
	         <span @click='deleteTag(index)' class='fa fa-close'></span>
   		</div>
    	<span v-show='tags.length > 4 ? false : true' @click="addTag" class="fa fa-plus-square-o">添加标签</span>

		// 点击添加标签
        addTag(){
            this.tags.push({"tag":"<input type='text' />"})
        },

        //删除标签
        deleteTag(index){
            this.tags.splice(index, 1)
        },

当我点击删除的时候,总是删除的是最后一个添加的节点,也就是新添加的那一个,我试了好多次,还是不行,回头又看了好多次我的方法,以为下标传错了什么之类的,但是我反复看了四五遍,没有发现错误。
然后又对splice方法进行了复习,又查阅了此方法还是不行。
于是我去网上搜(新手嘛,遇到了问题,你懂得…),网上也没有相关问题,只有一个说到了,说是vue的渲染问题,当你去删除标签时,他重复执行了方法,需要添加一个事件去重的方法,也没太看懂,就去翻阅了官网,查看了vue的v-for渲染和唯一的key值。

我的问题之所以会产生,是因为在于key的绑定问题,我只是用下标来绑定每一个标签的key,而没有与数组中元素挂钩,因此当删除数组元素时,vue会采用一种叫做’就地复用‘的原则,将旁边的元素直接拿过来使用,而vue官方有这样一句话(官方文档的重要性啊…):
在这里插入图片描述
vue官方链接:https://cn.vuejs.org/v2/guide/list.html#logo

我的解决办法是:push的时候为每一条元素添加一个id值,key值取它的id,与它的元素相关联

		// 点击添加标签
        addTag(){
            ++this.tagNum;
            this.tags.push({"tag":"<input type='text' />", 'id':this.tagNum})
        },

	 <div 
	      class="addtag"
	      v-for="(i,index) in tags"
	      :key="i.id"
	  >
	      <div v-html="i.tag" class="tags">{
  
  {i.tag}}
	      </div>
	      <span @click='deleteTag(index)' class='fa fa-close'></span>
	  </div>
	  <span v-show='tags.length > 4 ? false : true' @click="addTag" class="fa fa-plus-square-o">添加标签</span>

这样我的问题就解决了,今天遇到的这个问题认为有必要记录一下,也是第一次发文章,希望在前端的道路上多多学习吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189993.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月4日 下午5:43
下一篇 2026年3月4日 下午6:15


相关推荐

  • JAVA转义字符详解

    JAVA转义字符详解一 JAVA 中反斜杠 的作用在不同的系统中 路径的分隔符不同 故需要做出判断 并切换分隔符 VBS 代码中确实不用转义 但是在 JAVA 或 JS 中 它采用的是 C 语言的语法 所以要转义 引号内要双写 表示一个反 java 把字符串中的反斜杠 替换成 replaceAll 里面用的是正则表达式 所以字符串转义一次 正则转义一次 所以一个斜扛要写 4 个 用 replaceAll

    2026年3月17日
    2
  • 4K型护套连接器_电缆网套怎么使用方法

    4K型护套连接器_电缆网套怎么使用方法LCYVB-4型钢丝编织橡胶护套连接器4C型护套连接器4K型护套连接器 范围 本标准规定了LCYVB-4型钢丝编织橡胶护套连接器(简称连接器)的产品分类、基本参数、技术要求与试验方法、检验规则、标志、包装、运输和贮存。本标准适用于LCYVB-4型钢丝编织橡胶护套连接器系列产品。 规范性引用文件 下列件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成…..

    2022年10月2日
    4
  • 2进制,8进制,10进制,16进制在python中的表示方法和互相转换函数

    2进制,8进制,10进制,16进制在python中的表示方法和互相转换函数2 进制 满 2 进 1 nbsp 0b108 进制 满 8 进 1 nbsp 0o1010 进制 满 10 进 1 nbsp 1016 进制 满 16 进 1 nbsp 0x10 时间满 60 进 1bin nbsp 转 2 进制方法 int nbsp 转 10 进制方法 oct nbsp 转 8 进制方法 hex nbsp 转 16 进制方法 gt gt gt bin 20 0b10100 gt gt gt bin 0o45 0b gt amp

    2026年3月18日
    2
  • janus流媒体服务器搭建

    janus流媒体服务器搭建准备 ubuntu20 虚拟机注意 切换 root 用户 sudosu 否则以下很多命令要加 sudo linux 新版本推荐 apt 低版本 apt get 还能用 一安装工具 aptinstallgi tools 二安装 janus 依赖库 aptinstallli devapt

    2026年3月16日
    2
  • MySql的Explain用法

    MySql的Explain用法MySqlsql 机读顺序索引哪些情况需要创建索引哪些情况不需要创建索引 explain 执行计划 sql 机读顺序索引索引是帮助 mysql 高效获取数据的数据结构 单值索引 一个索引只包含单个列 一个表可以有多个单列索引 唯一索引 索引列的值必须唯一 但允许有空值 复合索引 一个索引包含多个列 哪些情况需要创建索引主键自动建立唯一索引 频繁作为查询条件的字段 查询中与其他表关联的字段 哪些情况不需要创建索引频繁更新的字段 每次更新不只是更新记录也会更新索引 where 条件里用不到的字段

    2026年3月19日
    2
  • 升级你的 MySQL 吧,感受下 MySQL 8 的新特性!

    来源:华为云社区   作者:HW云数据库 MySQL8.0的版本历史 2016-09-12第一个DM(development milestone)版本8.0.0…

    2021年6月22日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号