首页 文章

删除Vue子组件

提问于
浏览
11

我真的坚持这个 . 我创建了一个由子组件组成的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>

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

rows: [{ sometext: "Foo"} , { sometext: "Bar" }]

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

<div>{{ this.sometext }} <button @click="deleteRow">Delete Row</button></div>

而且我觉得在 rowcomponent 上设置一个类似的方法真的很容易:

deleteRow() {
    this.delete();
}

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

1 回答

  • 22

    是的,子组件无法删除自身 . 原因是因为 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>
    

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

相关问题