【问题标题】:Array Splice always delete an item from last?数组拼接总是从最后一个项目删除?
【发布时间】:2018-09-27 14:09:09
【问题描述】:

我在从数组中删除项目时遇到问题。阵列拼接应该可以工作,但它不能像我想要的那样工作。它总是从最后删除项目。我正在使用 Vue.js 。我正在将项目动态推送到数组。但点击后删除它从最后删除。为什么我要面对这个。我附上代码。

<template>
<div>
    <span class="badge badge-pill mb-10 px-10 py-5 btn-add" :class="btnClass" @click="addBtn"><i class="fa fa-plus mr-5"></i>Button</span>


        <div class="block-content block-content-full block-content-sm bg-body-light font-size-sm" v-if="buttons.length > 0">
            <div v-for="(item, index) in buttons">
                <div class="field-button">
                    <div class="delete_btn"><i @click="remove(index)" class="fa fa-trash-o"></i></div>
                    <flow-button v-model="item.title" :showLabel="false" className="btn btn-block min-width-125 mb-10 btn-border" mainWrapperClass="mb-0" wrapperClass="pt-0" placeholder="Button Title"></flow-button>
                </div>
            </div>
        </div>
    </div>
</div>
</template>
<script>
    import flowButton from '../assets/flow-button'

export default {
    name: "textArea",
    props:{
        index : Number
    },
    data() {
        return {
            buttons : [],
            btnClass : 'badge-primary',

        }
    }
    components : {
        flowButton
    },
    methods : {
        addBtn () {
            if(this.buttons.length >= 2) {
                this.btnClass = 'btn-secondary'
            }

            if(this.buttons.length < 3) {
                this.buttons.push({
                    title : ''
                });

            }
        },
        remove(index) {
            this.buttons.splice(index, 1)
        }
    }
}
 </script>

【问题讨论】:

  • 你有负指数吗?
  • 不。我试图控制索引及其给我正确的结果和值。但从最后删除该项目。那是有线的
  • 您的v-for 元素上似乎缺少:key
  • 你说的“从最后一个项目中删除”是什么意思
  • 我的意思是当我试图通过索引删除一个项目时,它总是删除最后一个项目。它像流行音乐一样工作

标签: javascript vue.js


【解决方案1】:

这一定是因为你的流程按钮,我试图复制你的错误,但最终得到了这段代码。我只是用输入替换了流程按钮,它可以工作。试试下面的代码。

使用 v-bind:key="index",当 Vue 更新使用 v-for 渲染的元素列表时,默认情况下它使用“就地补丁”策略。如果数据项的顺序发生了变化,而不是移动 DOM 元素以匹配项的顺序,Vue 将就地修补每个元素并确保它反映应该在该特定索引处呈现的内容。这类似于 track-by="$index"

的行为

你的数据和组件之间少了逗号,我这里去掉组件现在不会报错,更多提示不要把双引号和单引号混在一起。

<template>
<div>
<span class="badge badge-pill mb-10 px-10 py-5 btn-add" :class="btnClass" @click="addBtn"><i class="fa fa-plus mr-5"></i>Button</span>
  <div class="block-content block-content-full block-content-sm bg-body-light font-size-sm" v-if="buttons.length > 0">
    <div v-for="(item, index) in buttons" v-bind:key="index">
      <div class="field-button">
        <div class="delete_btn"><i @click="remove(index)" class="fa fa-trash-o">sdfsdff</i></div>
        <input type="text" v-model="item.title" :showLabel="false" className="btn btn-block min-width-125 mb-10 btn-border" mainWrapperClass="mb-0" wrapperClass="pt-0" placeholder="Button Title"/>
      </div>
    </div>
  </div>
</div>
</template>
<script>
export default {
  name: 'textArea',
  props: {
    index: Number
  },
  data () {
    return {
      buttons: [],
      btnClass: 'badge-primary'
    }
  },
  methods: {
    addBtn () {
      if (this.buttons.length >= 2) {
        this.btnClass = 'btn-secondary'
      }
      if (this.buttons.length < 3) {
        this.buttons.push({
          title: ''
        })
      }
    },
    remove (index) {
      this.buttons.splice(index, 1)
    }
  }
}
</script>

【讨论】:

  • 非常感谢。我用你的解决方案解决了这个问题。但是我使用了我的流程按钮组件,它现在可以工作了。我只是忘了传递一些道具。 :/ 我的错。顺便说一句,非常感谢。
【解决方案2】:

我认为您可能正面临与组件的 index 属性的冲突。尝试为 v-for 循环的索引使用不同的名称:

<div v-for="(item, ind) in buttons">
    <div class="field-button">
        <div class="delete_btn"><i @click="remove(ind)" class="fa fa-trash-o"></i></div>
        <flow-button v-model="item.title" :showLabel="false" className="btn btn-block min-width-125 mb-10 btn-border" mainWrapperClass="mb-0" wrapperClass="pt-0" placeholder="Button Title"></flow-button>
    </div>
</div>

【讨论】:

  • 那是一样的。我试图控制索引及其给我正确的结果和值。但从最后删除该项目。那是有线的
【解决方案3】:

试试这个。使用此正确删除项目。

<div v-for="(item, ind) in buttons" :key="JSON.stringify(item)">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 2018-03-15
    • 2022-08-05
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多