Vue.js总是从数组中删除最后一项

时间:2017-01-12 10:34:10

标签: javascript arrays vue.js splice vuejs2

我试图设置一个简单的过滤器,当我点击按钮"添加过滤器"我将复制过滤器,它将添加到带有过滤器的数组。添加没有问题但是我无法删除(交叉图标)正确的输入 - 我总是从数组中删除最后一项而不是正确的项。我有这段代码:

<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。

1 个答案:

答案 0 :(得分:2)

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

您没有在文字输入中添加v-model='filter.text',这会使您的所有过滤器看起来都相同,这就是它无法正常工作的原因。

现在正常工作。

希望它有所帮助。