>  기사  >  웹 프론트엔드  >  Vue를 사용하여 무한 목록을 구현하는 방법은 무엇입니까?

Vue를 사용하여 무한 목록을 구현하는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-25 15:23:201504검색

Vue는 현재 가장 인기 있는 프런트 엔드 프레임워크 중 하나이며, 편리한 데이터 바인딩과 유연한 구성 요소화 아이디어가 개발자들에게 선호됩니다. 개발 중에는 무한 목록을 표시해야 하는 시나리오가 자주 발생합니다. 이 기사에서는 Vue를 사용하여 무한 목록을 구현하는 방법을 소개합니다.

1. 데이터 구조 설계

무한 목록을 구현하려면 중첩된 데이터 구조가 필요합니다. 우리가 표시해야 하는 데이터 구조는 다음과 같다고 가정합니다.

[
    {id: 1, name: '菜单1', parent_id: 0},
    {id: 2, name: '菜单2', parent_id: 0},
    {id: 3, name: '菜单1-1', parent_id: 1},
    {id: 4, name: '菜单1-1-1', parent_id: 3},
    {id: 5, name: '菜单1-2', parent_id: 1},
    {id: 6, name: '菜单2-1', parent_id: 2},
    {id: 7, name: '菜单1-1-1-1', parent_id: 4}
]

그 중 id는 노드의 고유 식별자를 나타내고 name은 노드 이름을 나타내며 >parent_id는 노드의 상위 노드의 현재 id를 나타냅니다. 0이면 루트 노드임을 의미합니다. id 表示节点的唯一标识,name 表示节点名称,parent_id 表示当前节点的父节点的 id,如果为 0 则表示是根节点。

二、树状图的构建

我们需要将原始数据构建成一棵树状图结构,以便于后续的遍历和展示。可以定义一个递归的函数,将节点依次添加到对应的父节点中。

function buildTree(list, parentId) {
    let res = []
    for (let i = 0; i < list.length; i++) {
        if (list[i].parent_id === parentId) {
            let children = buildTree(list, list[i].id)
            if (children.length) {
                list[i].children = children
            }
            res.push(list[i])
        }
    }
    return res
}

let treeData = buildTree(list, 0)

三、列表的展示

Vue 提供了 v-for 指令用于循环渲染数据,我们可以使用递归组件来实现流畅的无限级列表展示。

在组件内,我们可以定义一个 d477f9ce7bf77f53fbcf36bec1b69b7a 标签,用于渲染当前节点及其子节点,如果当前节点存在子节点,则递归渲染子节点。在递归组件中,我们可以使用 props 来传递数据。

<template>
    <ul>
        <li v-for="item in list">
            {{item.name}}
            <recursive :list="item.children"></recursive>
        </li>
    </ul>
</template>
<script>
export default {
    name: 'recursive',
    props: {
        list: Array
    }
}
</script>

上述代码中,我们使用递归组件 recursive,在循环渲染每个节点时,使用 0d5e5586b192dc26c49fa85d51858604 标签对当前节点的子节点进行递归渲染。

四、节点的折叠和展开

无限级列表通常会有折叠和展开节点的功能,我们需要在组件中添加 isCollapsed 属性来表示当前节点是否折叠,并根据该属性来控制子节点的显示。

<template>
    <ul>
        <li v-for="item in list">
            <div @click="isCollapsed = !isCollapsed">{{item.name}}</div>
            <recursive v-show="!isCollapsed" :list="item.children"></recursive>
        </li>
    </ul>
</template>
<script>
export default {
    name: 'recursive',
    props: {
        list: Array
    },
    data() {
        return {
            isCollapsed: true
        }
    }
}
</script>

上述代码中,我们在节点名称所在的 dc6dce4a544fdca2df29d5ac0ea9906b 标签上添加了点击事件,点击时将 isCollapsed 属性取反,并使用 v-show

2. 덴드로그램 구성

후속 순회 및 표시를 용이하게 하려면 원본 데이터를 덴드로그램 구조로 구성해야 합니다. 해당 상위 노드에 노드를 순서대로 추가하는 재귀 함수를 정의할 수 있습니다.

rrreee

3. 목록 표시

Vue는 루프 렌더링 데이터에 대한 v-for 명령을 제공하여 원활한 무한 목록 표시를 달성할 수 있습니다. 🎜🎜구성 요소에서 d477f9ce7bf77f53fbcf36bec1b69b7a 태그를 정의하여 현재 노드와 해당 하위 노드를 렌더링할 수 있습니다. 현재 노드에 하위 노드가 있으면 하위 노드가 재귀적으로 렌더링됩니다. 재귀 구성 요소에서는 소품을 사용하여 데이터를 전달할 수 있습니다. 🎜rrreee🎜위 코드에서는 재귀 구성 요소 recursive를 사용합니다. 루프의 각 노드를 렌더링할 때 0d5e5586b192dc26c49fa85d51858604 태그를 사용하여 하위 노드를 재귀적으로 렌더링합니다. 현재 노드의 . 🎜🎜4. 노드 접기 및 확장🎜🎜무한 목록에는 일반적으로 노드 접기 및 확장 기능이 있습니다. 현재 노드가 접혀 있는지 여부를 나타내기 위해 구성 요소에 isCollapsed 속성을 ​​추가해야 합니다. 이 속성에 대해 하위 노드의 표시를 제어합니다. 🎜rrreee🎜위 코드에서는 노드 이름이 있는 dc6dce4a544fdca2df29d5ac0ea9906b 태그에 클릭 이벤트를 추가했습니다. 클릭하면 isCollapsed 속성이 반전되고 사용된 >v-show는 하위 노드의 표시를 제어합니다. 🎜🎜5. 요약🎜🎜위의 예를 통해 Vue에서 무한 목록을 구현하는 세 가지 주요 단계, 즉 데이터 구조 설계, 트리 다이어그램 구성 및 목록 표시를 이해할 수 있습니다. 동시에 노드의 접기 및 확장 기능을 추가하여 대화형 효과를 얻는 방법도 소개했습니다. 🎜🎜무한 레벨 목록의 구현은 전형적인 Vue 컴포넌트 개발 사례입니다. 이 사례에 대한 심층적인 이해는 Vue 개발 기술과 레벨을 향상시키는 데 도움이 될 수 있으며 컴포넌트 설계 및 개발에 유용한 참고 자료도 제공할 수 있습니다. 🎜

위 내용은 Vue를 사용하여 무한 목록을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.