封装单独的树操作栏组件

概要

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

整体架构流程

<template>
  <!-- 组织架构  放一个el-tree -->
    <el-row
      type="flex"
      justify="space-between"
      align="middle"
      style="height: 40px; width: 100%"
    >
      <el-col>
        <!-- 左侧内容 -->
        <span>{{ treeNode.name }}</span>
      </el-col>
      <el-col :span="4">
        <el-row type="flex" justify="end">
          <el-col>{{ treeNode.manager }}</el-col>
          <el-col>
            <!-- 放置下拉菜单 -->
            <el-dropdown>
              <!-- 内容 -->
              <span>
                操作
                <i class="el-icon-arrow-down" />
              </span>
              <!-- 具名插槽 -->
              <el-dropdown-menu slot="dropdown">
                <!-- 下拉选项 -->
                <el-dropdown-item>添加子部门</el-dropdown-item>
                <el-dropdown-item v-if="!isRoot">编辑部门</el-dropdown-item>
                <el-dropdown-item v-if="!isRoot">删除部门</el-dropdown-item>
              </el-dropdown-menu>
            </el-dropdown>
          </el-col>
        </el-row>
        <!-- 右侧内容 -->
      </el-col>
    </el-row>
</template>
<script>
export default {
// 组件要对开放 属性 外部需要提供一个对象 对象里面需要有name manger
  // props 可以用数组接受数据  也可以用对象来接受
  // props { props属性: { 配置项}}
  props: {
    treeNode: {
      type: Object, // 数据类型
      require: true // 要求对方使用您的组件的时候  必须传入treeNode属性
    },
    isRoot: {
      type: Boolean,
      default: false
    }
  }
}
</script>
<style></style>

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

<template>
  <div class="dashboard-container">
    <div class="app-container">
      <!-- 组织架构内容    头部 -->
      <el-card class="tree-card">
        <Treetocer :tree-node="company" :is-root="true" />
        <!-- 组织架构  放一个el-tree -->
        <el-tree :data="departs" :props="defaultProps" :default-expand-all="true">
          <!-- 传入内容 插槽内容 会循环多次 有多少节点 就循环多少次 -->
          <!-- 作用域插槽 slot-scope="obj" 接收传递给插槽的数据   data 每个节点的数据对象-->
          <Treetocer slot-scope="{ data }" :tree-node="data" />
        </el-tree>
      </el-card>
    </div>
  </div>
</template>
<script>
import Treetocer from '@/views/departments/componente/tree-tools.vue'
export default {
  components: {
    Treetocer
  },
  data() {
    return {
      company: { name: '三国之协调有限公司', manager: '负责人' },
      departs: [{ name: '总裁办', manager: '曹操', children: [{ name: '董事会', manager: '曹丕' }] },
        { name: '行政部', manager: '刘备' },
        { name: '人事部', manager: '孙权' }],
      defaultProps: {
        label: 'name' // 表示 从这个属性显示内容
      }
    }
  }
}
</script>
<style scoped>
.tree-card {
  padding: 30px  140px;
  font-size:14px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值