javascript - 使用 Vue 添加/删除动态 DOM 元素

标签 javascript html vue.js vuejs2

我已经开始学习 Vue.js,但我无法理解您如何在 Vue.js 中做到这一点,就像我使用 jQuery 那样:

<!-- jQuery -->
<h2>jQuery</h2>
<table id="t1">
  <tr>
    <th>Item</th>
    <th>Quantity</th>
  </tr>
  <tr id="r1">
    <td><input name="item[]" type="text"/></td>
    <td><input name="quantity[]" type="number"/></td>
    <td><button class="deleteRow">X</button></td>
  </tr>
</table>
<button id="addRow">Add Row</button>

.js

// jQuery
$(document).on('click', '#addRow', function(){
    var row = parseInt($('#t1 tr:last-child').attr('id')) + 1;
    alert(row);
        $('#t1').append('<tr id="r'+row+'"><td><input name="item[]" type="text"/></td><td><input name="quantity[]" type="number"/></td><td><button class="deleteRow">X</button></td></tr>');
});

$(document).on('click', '.deleteRow', function(){
        var row = parseInt($(this).closest('tr').attr('id'));
    $('#r'+row).remove();
});

如何使用 Vue 在单击时创建一个全新的元素以及如何删除它?

这里都是加载JSFiddle

最佳答案

VueJS 是数据驱动的,所以忘记直接的 DOM 操作。

在下面的示例中,您将看到我已经定义了 inputs 数组 - 这是我们存储所有行的地方 - 所以它将是对象数组。

在我们的模板中,我们遍历 inputs 数组,并且对于每个输入,我们也发送索引 - 行删除所必需的。

addRow 是将新对象推送到我们的 inputs 数组(具有预定义架构)的方法,并为其提供唯一索引。

示例如下:http://jsbin.com/zusokiy/edit?html,js,output

模板:

  <div id="app">

    <ul>
      <li v-for="(input, index) in inputs">
        <input type="text" v-model="input.one"> - {{ input.one }}  
        <input type="text" v-model="input.two"> - {{ input.two }}
        <button @click="deleteRow(index)">Delete</button>
      </li>
    </ul>

    <button @click="addRow">Add row</button>

  </div>

JS:

const app = new Vue({

  el: '#app',

  data: {
    inputs: []
  },

  methods: {
    addRow() {
      this.inputs.push({
        one: '',
        two: ''
      })
    },
    deleteRow(index) {
      this.inputs.splice(index,1)
    }
  }

})

更好的选择可能是将其分解成组件,但到目前为止,一切都很好。

关于javascript - 使用 Vue 添加/删除动态 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508040/

相关文章:

php - IF ELSE、PHP 和 CSS

html - Zurb-Foundation CSS 剪辑属性

jquery .glow 方法在 Firefox 中不能正常工作

javascript - 从v-link获取数据属性

javascript - 如何在容器 div 中显示 bootstrap v4 模态框?

javascript - 覆盖事件处理程序中的返回值?

javascript - 展开div回到原来的位置

javascript - 选择div的内容依次淡入

javascript - 访问 Nuxt 组件中的 axios 返回数组以便循环

javascript - vue.js 组件没有显示?