Ваша индексация выключена
Vue.delete(this.items[0].childs[0].childs, 0);
РЕДАКТИРОВАТЬ: как найти
var app = new Vue({
el:'#app',
data:{
items: [
{
id: 1, root : 'Animal', childs:[
{id: 3, root: 'Human', childs:[
{id: 4, root: 'Men' ,childs: null},
{id: 5, root: 'women', childs: null}
]},
{id: 6, root: 'bunny', childs: null},
{id: 7, root: 'fish', childs: null}
]
},
{id: 2, root : 'Vehicle', childs: [
{id: 8, root: 'Car'},
{id: 9, root: 'Bike'}
]}
]
},
methods: {
addingData: function(index){
this.items.push({root : 'House'})
},
findItem: (item, el) => {
var e = el === app.items ? app.items : el.childs
if(e) e.forEach(function(i) {
if(i == item)
e.splice(e.indexOf(i), 1)
app.findItem(item, i)
})
},
removingData: function(index){
this.findItem(index, this.items)
}
}
})
<head>
<meta name="viewport" content="width=device-width, initial-scale">
<title>Graph</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,index) in items">
{{item.root}} -
<button v-on:click="addingData(item.id)"> + </button>
<button v-on:click="removingData(item)"> - </button>
<ul>
<li v-for="(child, child_index) in item.childs">
{{child.root}} - <button v-on:click="addingData(child_index)"> + </button>
<button v-on:click="removingData(child)"> - </button>
<ul>
<li v-for="(childLevel2, childLevel2_index) in child.childs">
{{childLevel2.root}} -
<button v-on:click="addingData(child_index)"> + </button>
<button v-on:click="removingData(childLevel2)"> - </button>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="script.js"></script>
</body>
</html>
http://plnkr.co/edit/hDFpQjh2T0MM2mp16w4e?p=preview
То же самое длядобавить, следуйте древовидной структуре данных, используя childs
, чтобы получить правильный индекс, и добавьте туда