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