当前位置:首页 > VUE

vue实现书籍目录

2026-03-10 08:25:16VUE

实现书籍目录的基本思路

使用Vue实现书籍目录通常需要结合数据绑定、组件化和路由跳转等功能。核心是将目录数据结构化,通过递归组件或列表渲染展示层级关系,并支持点击跳转到对应章节。

数据结构设计

典型的目录数据结构可采用嵌套数组或对象形式,例如:

const chapters = [
  {
    id: 1,
    title: "第一章",
    children: [
      { id: 1.1, title: "第一节" },
      { id: 1.2, title: "第二节" }
    ]
  },
  {
    id: 2,
    title: "第二章",
    children: [
      { 
        id: 2.1, 
        title: "第一节",
        children: [
          { id: 2.1.1, title: "第一小节" }
        ]
      }
    ]
  }
]

递归组件实现

创建可递归渲染的目录组件:

<template>
  <ul>
    <li v-for="item in data" :key="item.id">
      <span @click="handleClick(item)">{{ item.title }}</span>
      <directory-tree 
        v-if="item.children && item.children.length" 
        :data="item.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  name: 'DirectoryTree',
  props: ['data'],
  methods: {
    handleClick(item) {
      this.$emit('select', item)
    }
  }
}
</script>

路由跳转集成

在父组件中集成路由跳转逻辑:

<template>
  <div class="book-container">
    <directory-tree 
      :data="chapters" 
      @select="jumpToChapter"
    />
    <router-view/>
  </div>
</template>

<script>
import DirectoryTree from './DirectoryTree.vue'

export default {
  components: { DirectoryTree },
  data() {
    return {
      chapters: [...] // 目录数据
    }
  },
  methods: {
    jumpToChapter(item) {
      this.$router.push(`/chapter/${item.id}`)
    }
  }
}
</script>

样式优化

添加基础样式增强可读性:

ul {
  list-style-type: none;
  padding-left: 1em;
}

li span {
  cursor: pointer;
  padding: 0.2em 0;
  display: inline-block;
}

li span:hover {
  color: #42b983;
  text-decoration: underline;
}

动态加载实现

对于大型书籍目录,可考虑动态加载:

async loadChapter(id) {
  const res = await fetch(`/api/chapters/${id}`)
  this.currentChapter = await res.json()
}

响应式目录高亮

通过路由匹配实现当前章节高亮:

computed: {
  activeChapterId() {
    return this.$route.params.id
  }
}

在模板中添加高亮类绑定:

<span 
  :class="{ active: item.id === activeChapterId }"
  @click="handleClick(item)"
>
  {{ item.title }}
</span>

可折叠目录实现

添加折叠功能需扩展组件:

vue实现书籍目录

<template>
  <ul>
    <li v-for="item in data" :key="item.id">
      <div class="folder-header" @click="toggle(item)">
        <span>{{ item.title }}</span>
        <span v-if="hasChildren(item)">{{ isOpen(item) ? '−' : '+' }}</span>
      </div>
      <directory-tree
        v-if="isOpen(item) && hasChildren(item)"
        :data="item.children"
      />
    </li>
  </ul>
</template>

标签: 书籍目录
分享给朋友:

相关文章

vue实现书籍网站

vue实现书籍网站

Vue 实现书籍网站的关键步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态(如购物车、用户信息)。引入 U…

vue实现目录功能

vue实现目录功能

Vue实现目录功能的方法 基于路由的目录结构 在Vue项目中,可以通过路由配置自动生成目录结构。使用vue-router的routes数组可以定义页面层级关系,结合递归组件渲染目录树。 // rou…

vue实现书籍目录

vue实现书籍目录

实现书籍目录的基本思路 使用Vue实现书籍目录需要结合组件化开发思想,通过数据驱动视图的方式动态渲染目录结构。核心在于构建树形数据结构,并通过递归组件或循环嵌套实现多级目录展示。 数据准备 典型的目…

vue实现动态树形目录

vue实现动态树形目录

动态树形目录的实现方法 在Vue中实现动态树形目录通常涉及递归组件和动态数据加载。以下是具体实现步骤: 数据结构设计 树形数据通常采用嵌套结构,每个节点包含子节点数组: const treeDat…

jquery 书籍

jquery 书籍

以下是几本值得推荐的 jQuery 书籍,涵盖从入门到进阶的内容,适合不同阶段的开发者学习参考: 《jQuery in Action》 作者:Bear Bibeault、Yehuda Katz…

uniapp 目录

uniapp 目录

uniapp 目录结构 uniapp 项目遵循标准目录结构,便于开发和管理。以下为常见目录及其用途: 根目录 pages:存放页面文件,每个页面为一个文件夹,包含 .vue、.js、.json 文…