用代码演示创建一个Vue实例,并将其挂载到一个具有id为“app”的DOM元素上。 在data中定义一个名为items的空数组。 在created生命周期钩子中,定义一个原始数据数组rawData,以及一个空对象itemMap。 遍历rawData数组中的每个元素,并为每个元素添加一个children属性,并将其添加到itemMap中,以便后面在构造树形结构时能够快速查找元素。 定义一个空数组items,用于存储构造出的树形结构。 遍历rawData数组中的每个元素,如果该元素的parentId为null,将其添加到items数组中;否则,从itemMap中查找该元素的父元素,并将其添加到父元素的children数组中。 将构造好的items数组赋值给Vue实例的data中的items属性,以便在模板中使用。
时间: 2024-03-21 16:42:51 浏览: 51
好的,下面是一个示例代码,实现上述功能:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vue Example</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in items">
{{ item.name }}
<ul v-if="item.children.length > 0">
<li v-for="child in item.children">
{{ child.name }}
</li>
</ul>
</li>
</ul>
</div>
<script>
const app = new Vue({
el: '#app',
data() {
return {
items: []
}
},
created() {
const rawData = [
{
"id": 1,
"name": "item 1",
"parentId": null
},
{
"id": 2,
"name": "item 2",
"parentId": 1
},
{
"id": 3,
"name": "item 3",
"parentId": 2
},
{
"id": 4,
"name": "item 4",
"parentId": null
}
];
const itemMap = {};
rawData.forEach(item => {
item.children = [];
itemMap[item.id] = item;
});
const items = [];
rawData.forEach(item => {
if (item.parentId === null) {
items.push(item);
} else {
const parentItem = itemMap[item.parentId];
parentItem.children.push(item);
}
});
this.items = items;
}
});
</script>
</body>
</html>
```
在这个示例代码中,我们首先在HTML中定义了一个具有id为“app”的DIV元素,用于挂载Vue实例。然后,在JavaScript代码中,我们创建了一个Vue实例,并将其挂载到该DIV元素上。在data中定义了一个名为items的空数组。在created生命周期钩子中,我们定义了一个原始数据数组rawData,以及一个空对象itemMap。然后,我们遍历rawData数组中的每个元素,并为每个元素添加一个children属性,并将其添加到itemMap中。接着,我们定义一个空数组items,用于存储构造出的树形结构。然后,我们遍历rawData数组中的每个元素,如果该元素的parentId为null,将其添加到items数组中;否则,从itemMap中查找该元素的父元素,并将其添加到父元素的children数组中。最后,我们将构造好的items数组赋值给Vue实例的data中的items属性,以便在模板中使用。在模板中,我们使用v-for指令来遍历items数组,并展示每个元素及其子元素的名称。
阅读全文