优化面包屑导航栏点击目录会一直追加目录名称的bug的代码,可以在点击目录时,先判断当前目录是否已经存在于导航路径中,如果存在,则将其后面的目录都删除,然后再添加当前目录。修改后的代码如下:

<template>
  <div>
    <el-breadcrumb separator-class="el-icon-arrow-right">
      <el-breadcrumb-item v-for="(item, index) in path" :key="index">
        <span @click="pathClick(index)">{{ item.name }}</span>
      </el-breadcrumb-item>
    </el-breadcrumb>
    <el-tree
      :data="folderData"
      :props="treeProps"
      node-key="id"
      :default-expanded-keys="expandedKeys"
      @node-click="folderClick"
      @node-dblclick="folderDblClick"
      :show-checkbox="false"
    >
    </el-tree>
    <el-row v-if="currentFolder !== null">
      <el-col :span="12">
        <h3>文件夹</h3>
        <el-button type="primary" @click="createFolder">新建文件夹</el-button>
        <!-- 文件夹列表 -->
        <el-table :data="currentFolder.folders" height="300">
          <el-table-column prop="name" label="名称"></el-table-column>
        </el-table>
      </el-col>
      <el-col :span="12">
        <h3>文件</h3>
        <el-upload
          class="upload-demo"
          :action="uploadUrl"
          :on-success="handleUploadSuccess"
          :on-error="handleUploadError"
        >
          <el-button size="small" type="primary">点击上传</el-button>
        </el-upload>
        <!-- 文件列表 -->
        <el-table :data="currentFolder.files" height="300">
          <el-table-column prop="name" label="名称"></el-table-column>
        </el-table>
      </el-col>
    </el-row>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 模拟数据
      folderData: [
        {
          id: 1,
          name: "根目录",
          folders: [
            {
              id: 2,
              name: "子目录1",
              folders: [],
              files: [
                { id: 4, name: "文件1" },
                { id: 5, name: "文件2" }
              ]
            },
            {
              id: 3,
              name: "子目录2",
              folders: [],
              files: []
            }
          ],
          files: []
        }
      ],
      currentFolder: null, // 当前打开的文件夹
      path: [], // 导航路径
      expandedKeys: [1], // 默认展开的节点
      uploadUrl: "your_upload_url" // 文件上传接口
    }
  },
  computed: {
    treeProps() {
      return {
        children: "folders",
        label: "name"
      }
    }
  },
  methods: {
    // 点击导航路径
    pathClick(index) {
      this.path = this.path.slice(0, index + 1)
      this.currentFolder = this.path[index]
    },
    // 点击文件夹
    folderClick(data) {
      const index = this.path.findIndex(item => item.id === data.id)
      if (index !== -1) {
        this.path = this.path.slice(0, index + 1)
      } else {
        this.path.push(data)
      }
      this.currentFolder = data
    },
    // 双击文件夹
    folderDblClick(data) {
      const index = this.path.findIndex(item => item.id === data.id)
      if (index !== -1) {
        this.path = this.path.slice(0, index + 1)
      } else {
        this.path.push(data)
      }
      this.currentFolder = data
      this.expandedKeys.push(data.id)
    },
    // 返回上一级
    goBack() {
      this.path.pop()
      this.currentFolder = this.path[this.path.length - 1] || null
    },
    // 新建文件夹
    createFolder() {
      this.currentFolder.folders.push({
        id: new Date().getTime(),
        name: "新建文件夹",
        folders: [],
        files: []
      })
    },
    // 上传文件成功回调
    handleUploadSuccess(response) {
      // 处理上传成功的逻辑
    },
    // 上传文件失败回调
    handleUploadError() {
      // 处理上传失败的逻辑
    }
  }
}
</script>

修改的部分是在folderClickfolderDblClick方法中,先使用findIndex方法查找当前目录是否已经存在于导航路径中,如果存在,则将其后面的目录都删除,然后再添加当前目录。这样可以避免目录重复追加的问题

优化这段代码中面包屑导航栏点击目录会一直追加目录名称的bugtemplate div el-breadcrumb separator-class=el-icon-arrow-right el-breadcrumb-item v-for=item index in path key=index span click=pathClickindex itemname sp

原文地址: https://www.cveoy.top/t/topic/ibuR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录