前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 使用数组splice方法失效,且总是删除最后一项的解决办法。[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-11-08 15:54:18
2.4K0
发布2022-11-08 15:54:18
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

今天在写项目的时候,遇到一个很简单的需求,下图,点击添加标签,左边出现一个可以输入的标签,点击删除按钮, 就能删除当前标签,很简单的需求,我却搞了一个多小时(哎…新手愚笨啊)

今天在写项目的时候
今天在写项目的时候

一看到这个我的思路就是点击添加标签,把新增的节点push到自己定义的数组里,然后渲染出来,点击删除按钮,用splice方法从数组中删除掉当前的节点(很简单,很明确的思路嘛,但是却事与愿违)

代码语言:javascript
复制
		<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,与它的元素相关联

代码语言:javascript
复制
		// 点击添加标签
        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>

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月24日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档