Vue.js 始终从数组中删除最后一项

Vue.js remove always last item from array

我正在尝试创建一个简单的过滤器,当我单击按钮 "add filter" 时,我将复制过滤器并将其添加到带有过滤器的数组中。添加没有问题,但我无法删除(十字图标)正确的输入 - 我总是从数组中删除最后一项而不是正确的输入。我有这个代码:

<div class="container">

  <div class="jumbotron">
    <div>
      <div class="form-group">
        <input type="text" class="form-control input-sm" id="pref-search">
      </div>
      <div class="form-group">
        <button type="button" class="btn btn-default filter-col btn-sm" v-on:click="addFilter">
          <i class="fa fa-plus-circle" aria-hidden="true"></i> Add filter
        </button>
      </div>
    </div>

    <div v-for="filter in extFilters.filters" style="margin: 10px 0">
      <div class="form-group">
        <input type="text" class="form-control input-sm" id="pref-search">
      </div>
      <div class="form-group">
        <button type="button" class="btn btn-default filter-col btn-sm" v-on:click="addFilter">
          <i class="fa fa-plus-circle" aria-hidden="true"></i> Add filter
        </button>
        <span v-on:click="removeFilter(filter)"><i class="fa fa-times" aria-hidden="true"></i></span>
      </div>
    </div>
  </div>
</div>

这里是 Vue.js:

var data = {
  'filters': [],
}

// app Vue instance
var app = new Vue({
  // app initial state
  data: {
    extFilters: data,
  },

  // methods that implement data logic.
  methods: {
    addFilter: function() {
      this.extFilters.filters.push({
        andor: 'a',
        search_in: '',
        operator: '',
        text: ''
      })
    },

    removeFilter: function(filter) {
      var index = this.extFilters.filters.indexOf(filter);
      this.extFilters.filters.splice(index, 1);
    },
  },
})

// mount
app.$mount('.jumbotron')

问题是当我添加例如三个过滤器并且我想删除第一个过滤器时它总是会删除最后一个。为什么会这样或者我哪里做错了?

这是我在 jsFiddle 上遇到的问题。最佳答案也在 jsFiddle 中。

正确答案是...https://jsfiddle.net/mariaczi/hed0ew5o/1/

您没有将 v-model='filter.text' 添加到文本输入,这使得您的所有过滤器看起来都一样,这就是它不起作用的原因。

现在工作正常。

希望对您有所帮助。