Удаление дочернего компонента Vue
Я действительно застрял на этом.Я создал компонент 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();
}
нужно ли мне $ emit что-то родителю с индексом строки в нем, чтобы удалить его? Это сводит меня с ума. Все примеры показывают, что это было бы легко сделать, но не в том случае, когда у вас есть дочерние компоненты, которые хотят удалить себя.
1 ответов
да, дочерний компонент не может удалить себя. Причина в том, что исходные данные для rows
удерживается в Родительском компоненте.
если дочернему компоненту разрешено удалять себя, то будет несоответствие между rows
данные о родителе и представлении DOM, которое было отображено.
вот простой jsFiddle для справки:https://jsfiddle.net/mani04/4kyzkgLu/
как вы можете видеть, есть родительский компонент, который содержит массив данных, и дочерний компонент, который отправляет события через $emit
удалить самостоятельно. Родитель прослушивает событие delete с помощью v-on
следующим образом:
<row-component
v-for="(row, index) in rows"
:row-data="row"
v-on:delete-row="deleteThisRow(index)">
</row-component>
на index
имущество, предоставленное v-for
можно назвать deleteThisRow
метод, когда delete-row
событие получено из дочернего компонента.