最终方案:e+elementui实现一个需求:1,页面左右布局,左侧为el-tree树形结构菜单,右侧为对应的子组件 2、每个子组件都有表单构成,用户可输入表单数据 3、父组件包括一个提交按钮,在

本文介绍如何使用Vue.js和Element UI构建一个页面,左侧为el-tree树形菜单,右侧显示对应子组件的表单。每个子组件含有表单,数据保存在父组件,点击提交按钮后,获取所有子组件的表单数据并发送到后端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好的,下面是一个实现以上需求的 Vue.js 组件:

<template>
  <div class="container">
    <div class="menu">
      <el-tree :data="menuData" @node-click="handleMenuClick"></el-tree>
    </div>
    <div class="content">
      <component :is="currentComponent"></component>
    </div>
    <div class="submit">
      <el-button type="primary" @click="handleSubmit">提交</el-button>
    </div>
  </div>
</template>

<script>
import Component1 from './Component1.vue'
import Component2 from './Component2.vue'
import Component3 from './Component3.vue'

export default {
   
   
  name: 'MyComponent',
  components: {
   
   
    Component1,
    Component2,
    Component3,
  },
  data() {
   
   
    return {
   
   
      menuData: [
        {
   
   
          label: '组件1',
          name: 'component1',
        },
        {
   
   
          label: '组件2',
          name: 'component2',
        },
        {
   
   
          label: '组件3',
          name: 'component3',
        },
      ],
      currentComponent: '',
      componentData: {
   
   },
    };
  },
  methods: {
   
   
    handleMenuClick(data) {
   
   
      this.currentComponent = data.name;
    },
    handleSubmit() {
   
   
      console.log(this.componentData);
    },
  },
};
</script>

<style>
.container {
   
   
  display: flex;
  height: 100%;
}
.menu {
   
   
  width: 200px;
}
.content {
   
   
  flex-grow: 1;
}
.submit {
   
   
  width: 100%;
  text-align: center;
  margin-top: 20px;
}
</style>

在这个组件中,左侧菜单使用了 Element UI 的 el-tree 组件,右侧内容区域使用了 Vue.js 的动态组件,根据当前选中的菜单项来动态加载不同的子组件。父组件中定义了一个 componentData 对象,用于保存各个子组件的表单数据。当点击提交按钮时,可以通过 console.log(this.componentData) 来获取所有子组件输入的数据。

注意,上面的代码中并没有实现子组件的表单,因为每个子组件的表单结构可能不同,具体的表单结构需要根据需求自行实现。不过,这个组件已经提供了一个框架,可以方便地进行扩展和修改。

好的,下面是针对之前提供的代码的一些完善:

在父组件中加入一个变量 selectedData,用于保存当前选中的菜单项的数据,以便在子组件中获取。

在子组件中加入表单,绑定表单数据和父组件中的 selectedData 变量。

在父组件中实现 handleSubmit 方法,遍历子组件中的表单数据,将数据保存到 componentData 对象中。

在父组件中通过 $refs 获取所有子组件的实例,以便在 handleSubmit 方法中调用子组件中的方法获取表单数据。

完善后的代码如下:

<template>
  <div class="container">
    <div class="menu">
      <el-tree :data="menuData" @node-click="handleMenuClick"></el-tree>
    </div>
    <div class="content">
      <component :is="currentComponent" ref="currentComponentRef"></component>
    </div>
    <div class="submit">
      <el-button type="primary" @click="handleSubmit">提交</el-button>
    </div>
  </div>
</template>

<script>
import Component1 from './Component1.vue'
import Component2 from './Component2.vue'
import Component3 from './Component3.vue'

export default {
   
   
  name: 'MyComponent',
  components: {
   
   
    Component1,
    Component2,
    Component3,
  },
  data() {
   
   
    return {
   
   
      menuData: [
        {
   
   
          label: '组件1',
          name: 'component1'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值