Vue + element实现动态表格表单

在实际开发过程中,有可能遇到树结构+表格展示数据的要求。比如页面左边是Tree树型控件,右边为table表格。要求点击左边树,右边展示出对应的表格数据。表头不固定,其对应的查询条件表单也不固定。此时的表格表单都需要动态展示。

<!---->
<el-tree
   :props="treeProps"
   :isLazy='false'
   :data="treeData"
   :highlight-current="true"
   :expand-on-click-node="false"
   @node-click="treeClick"
>
   <span
      slot-scope="{ node, data }"
      // 当前点击变色
      :class="{'node-active':data.name == clickData.name}"
   >{{node.label}}</span>
</el-tree>

<!-- 表格 -->
<el-table
  ref="table"
  :data="tableData"
  max-height="500"
>
  <el-table-column
        v-for="(col , i) in tableTitle"
        :key="i"
        :prop="col.value"
        show-overflow-tooltip
        :label="col.title"
        align="center"
    >
  </el-table-column>
</el-table>

<!-- 查询表单 -->
<el-form
  :inline="true"
  ref="searchForm"
  :model="searchForm"
>
  <el-form-item
    v-for="(form, i) in searchItems"
    :key="i"
    :label="form.label"
    :prop="form.prop"
  >
    <el-input
      v-model="searchForm[form.prop]"
      :clearable="form.clearable"
    ></el-input>
  </el-form-item>   
</el-form>

// 树点击事件
treeClick(data){
  this.clickData = node
  // 下面调用接口传递点击数据,拿到对应的动态表头和表单数据
  // 点击一个树节点后拿到的模拟数据
  this.tableTitle =             // 表头数据
   [
     {title:'姓名', value:'name'}
     {title: '性别', value: 'sex'}
     {title: '年龄', value: 'age'}
   ]
  this.tableData = [           // 表格数据
  	{name: 'Alice', sex: 'female', age: '22'}
  	{name: 'Bob', sex: 'male', age: '23'}
  ]
  this.searchItems = {		   // 查询表单数据
	{label: '姓名', prop:'name', clearable: true}
	{label: '性别', prop: 'sex', clearable: true}
  }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Vue.jsElement UI 实现表格单元格编辑的步骤如下: 1. 导入 Element UI 的表格表单组件: ```vue <template> <div> <el-table :data="tableData" style="width: 100%"> <!-- 表格列定义 --> </el-table> </div> </template> <script> import { ElTable, ElTableColumn, ElInput } from 'element-ui' export default { components: { ElTable, ElTableColumn, ElInput }, data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 }, { name: '王五', age: 30 } ], editIndex: -1 } } } </script> ``` 2. 在表格中的每一行定义一个编辑按钮,点击编辑按钮后将当前行进入编辑状态: ```vue <el-table :data="tableData" style="width: 100%"> <el-table-column label="姓名"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> {{ scope.row.name }} </template> <template v-else> <el-input v-model="scope.row.name"></el-input> </template> </template> </el-table-column> <el-table-column label="年龄"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> {{ scope.row.age }} </template> <template v-else> <el-input v-model="scope.row.age"></el-input> </template> </template> </el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> <el-button type="primary" size="small" @click="edit(scope.$index)">编辑</el-button> </template> <template v-else> <el-button type="success" size="small" @click="save(scope.$index)">保存</el-button> <el-button type="warning" size="small" @click="cancel(scope.$index)">取消</el-button> </template> </template> </el-table-column> </el-table> ``` 3. 定义编辑按钮的点击事件和保存、取消按钮的点击事件: ```vue export default { // 省略其他代码 methods: { edit(index) { this.editIndex = index }, save(index) { this.editIndex = -1 }, cancel(index) { this.editIndex = -1 } } } ``` 完整代码如下: ```vue <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column label="姓名"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> {{ scope.row.name }} </template> <template v-else> <el-input v-model="scope.row.name"></el-input> </template> </template> </el-table-column> <el-table-column label="年龄"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> {{ scope.row.age }} </template> <template v-else> <el-input v-model="scope.row.age"></el-input> </template> </template> </el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <template v-if="editIndex !== scope.$index"> <el-button type="primary" size="small" @click="edit(scope.$index)">编辑</el-button> </template> <template v-else> <el-button type="success" size="small" @click="save(scope.$index)">保存</el-button> <el-button type="warning" size="small" @click="cancel(scope.$index)">取消</el-button> </template> </template> </el-table-column> </el-table> </div> </template> <script> import { ElTable, ElTableColumn, ElInput, ElButton } from 'element-ui' export default { components: { ElTable, ElTableColumn, ElInput, ElButton }, data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 }, { name: '王五', age: 30 } ], editIndex: -1 } }, methods: { edit(index) { this.editIndex = index }, save(index) { this.editIndex = -1 }, cancel(index) { this.editIndex = -1 } } } </script> ``` 这样就可以通过 Vue.jsElement UI 实现表格单元格编辑了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值