删除Vue子组件

Ben*_*vey 11 vue.js

我真的坚持这个.我创建了一个由子组件组成的Vue(2.0)组件,它都是Webpacked等.例如,这是父:

<div>

    <h1>This is just a title for lulz</h1>

    <rowcomponent v-for="row in rows" :row-data="row"></rowcomponent>

</div>
Run Code Online (Sandbox Code Playgroud)

有一个rows传递给它的道具,看起来像这样:

rows: [{ sometext: "Foo"} , { sometext: "Bar" }]
Run Code Online (Sandbox Code Playgroud)

所以我的行组件看起来像这样:

<div>{{ this.sometext }} <button @click="deleteRow">Delete Row</button></div>
Run Code Online (Sandbox Code Playgroud)

而且我觉得设置一个方法应该很容易rowcomponent就是这样:

deleteRow() {
    this.delete();
}
Run Code Online (Sandbox Code Playgroud)

我是否需要$向父级发出一些内容并使用其中的行索引将其删除?这让我疯狂.所有示例似乎都表明它很容易做到,但是在你有子组件想要删除自己的情况下则不行.

Man*_*ani 24

是的,子组件无法删除自身.原因是因为原始数据rows保存在父组件中.

如果允许子组件自行删除,则rows父级数据与已呈现的DOM视图之间将存在不匹配.

这是一个简单的jsFiddle供参考:https://jsfiddle.net/mani04/4kyzkgLu/

如您所见,有一个包含数据数组的父组件,以及通过$emit删除自身发送事件的子组件.父级使用v-on以下方法侦听delete事件:

<row-component
    v-for="(row, index) in rows"
    :row-data="row"
    v-on:delete-row="deleteThisRow(index)">
</row-component>
Run Code Online (Sandbox Code Playgroud)

当从子组件接收到事件时,index提供的属性v-for可用于调用该deleteThisRow方法delete-row.

  • 正如对这一个的快速更新,我发现如果你动态添加行,它会失败并且总是删除最后一行,但是,如果你做````deleteThisRow(row)````并使用`` ``this.rows.splice(this.rows.indexOf(row))````它会好的. (5认同)
  • 对上述评论的更正.它应该是`this.rows.splice(this.rows.indexOf(row),1)` (4认同)