当前位置:   article > 正文

封装单独的树操作栏组件

封装单独的树操作栏组件

概要

      把公共的部分单独拆出来,封装到一个新的vue文件夹中, 里面的数据通过父传子的方式传递,子通过props接受(静态代码实现的树状图细看代码展示)

整体架构流程

  1. <template>
  2. <!-- 组织架构 放一个el-tree -->
  3. <el-row
  4. type="flex"
  5. justify="space-between"
  6. align="middle"
  7. style="height: 40px; width: 100%"
  8. >
  9. <el-col>
  10. <!-- 左侧内容 -->
  11. <span>{{ treeNode.name }}</span>
  12. </el-col>
  13. <el-col :span="4">
  14. <el-row type="flex" justify="end">
  15. <el-col>{{ treeNode.manager }}</el-col>
  16. <el-col>
  17. <!-- 放置下拉菜单 -->
  18. <el-dropdown>
  19. <!-- 内容 -->
  20. <span>
  21. 操作
  22. <i class="el-icon-arrow-down" />
  23. </span>
  24. <!-- 具名插槽 -->
  25. <el-dropdown-menu slot="dropdown">
  26. <!-- 下拉选项 -->
  27. <el-dropdown-item>添加子部门</el-dropdown-item>
  28. <el-dropdown-item v-if="!isRoot">编辑部门</el-dropdown-item>
  29. <el-dropdown-item v-if="!isRoot">删除部门</el-dropdown-item>
  30. </el-dropdown-menu>
  31. </el-dropdown>
  32. </el-col>
  33. </el-row>
  34. <!-- 右侧内容 -->
  35. </el-col>
  36. </el-row>
  37. </template>
  38. <script>
  39. export default {
  40. // 组件要对开放 属性 外部需要提供一个对象 对象里面需要有name manger
  41. // props 可以用数组接受数据 也可以用对象来接受
  42. // props { props属性: { 配置项}}
  43. props: {
  44. treeNode: {
  45. type: Object, // 数据类型
  46. require: true // 要求对方使用您的组件的时候 必须传入treeNode属性
  47. },
  48. isRoot: {
  49. type: Boolean,
  50. default: false
  51. }
  52. }
  53. }
  54. </script>
  55. <style></style>

 2 父组件中通过引用,来实现,把引入的组件通过compones 注册组件 ,把组件引入到需要的地方,父组件用的时候要传入子组件需要用到的参数,就是子组件props里面申明的值

  1. <template>
  2. <div class="dashboard-container">
  3. <div class="app-container">
  4. <!-- 组织架构内容 头部 -->
  5. <el-card class="tree-card">
  6. <Treetocer :tree-node="company" :is-root="true" />
  7. <!-- 组织架构 放一个el-tree -->
  8. <el-tree :data="departs" :props="defaultProps" :default-expand-all="true">
  9. <!-- 传入内容 插槽内容 会循环多次 有多少节点 就循环多少次 -->
  10. <!-- 作用域插槽 slot-scope="obj" 接收传递给插槽的数据 data 每个节点的数据对象-->
  11. <Treetocer slot-scope="{ data }" :tree-node="data" />
  12. </el-tree>
  13. </el-card>
  14. </div>
  15. </div>
  16. </template>
  17. <script>
  18. import Treetocer from '@/views/departments/componente/tree-tools.vue'
  19. export default {
  20. components: {
  21. Treetocer
  22. },
  23. data() {
  24. return {
  25. company: { name: '三国之协调有限公司', manager: '负责人' },
  26. departs: [{ name: '总裁办', manager: '曹操', children: [{ name: '董事会', manager: '曹丕' }] },
  27. { name: '行政部', manager: '刘备' },
  28. { name: '人事部', manager: '孙权' }],
  29. defaultProps: {
  30. label: 'name' // 表示 从这个属性显示内容
  31. }
  32. }
  33. }
  34. }
  35. </script>
  36. <style scoped>
  37. .tree-card {
  38. padding: 30px 140px;
  39. font-size:14px;
  40. }
  41. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/388784
推荐阅读
相关标签
  

闽ICP备14008679号