<template>
<div>
<h1>场景数据</h1>
<ul>
<li v-for="(item, index) in mergedChildren" :key="index">
{{ item.label }} - {{ item.tsName }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
scenes: [
{
children: [
{
label: "河道",
id: "子场景1",
},
// ... 其他子场景
],
id: "场景一",
label: "河道一",
},
{
children: [
{
label: "河道来水",
id: "子场景1",
},
// ... 其他子场景
],
id: "场景二",
label: "来水过程",
},
// ... 其他场景
],
};
},
computed: {
mergedChildren() {
const result = [];
this.extractChildren(this.scenes, result);
return result;
},
},
methods: {
extractChildren(scenes, result) {
scenes.forEach((scene) => {
if (scene.children && Array.isArray(scene.children)) {
result.push(...scene.children);
}
});
},
},
};
</script>
<style scoped>
/* 样式可以根据需要自定义 */
</style>
代码解析
-
数据结构:
scenes
是原始的场景数据,包含多个场景对象,每个对象都有一个children
数组。
-
计算属性:
mergedChildren
是一个计算属性,它会调用extractChildren
方法来提取所有子场景并将其推入result
数组中。
-
方法:
extractChildren
方法接收场景数组和结果数组作为参数,遍历每个场景的children
,并将其推入结果数组。
-
模板:
- 使用
v-for
循环遍历mergedChildren
,显示每个子场景的label
和tsName
。
- 使用