uni-app無限級樹形組件簡單實現(xiàn)代碼
因為項目一些數(shù)據(jù)需要樹形展示,但是官網(wǎng)組件沒有?,F(xiàn)在簡單封裝一個組件在app中使用,可以無線嵌套,展開,收縮,獲取子節(jié)點數(shù)據(jù)等。
簡單效果


組件TreeData
<template>
<view class="tree">
<template v-for="(node, index) in treeData">
<view>
<span @click="toggleNode($event, node)">
<uni-icons
v-if="node.children && node.children.length > 0"
:type="node.expanded ? 'arrowdown' : 'arrowright'"
size="14"
></uni-icons>
{{ node.label }}
</span>
<span
@click.stop="deleteNode($event, node)"
class="action-button delete-button"
>刪除</span
>
<span
@click.stop="editNode($event, node)"
class="action-button edit-button"
>編輯</span
>
<view v-if="node.expanded" class="children">
<Tree
:treeData="node.children"
@edit-node="(childNode) => $emit('edit-node', childNode)"
@delete-node="(childNode) => $emit('delete-node', childNode)"
/>
</view>
</view>
</template>
</view>
</template>
<script>
export default {
name: "Tree",
props: {
treeData: {
type: Array,
default: () => [],
},
expandAll: {
type: Boolean,
default: true,
},
},
data() {
return {
init: false,
};
},
watch: {
treeData: {
immediate: true,
handler(newData) {
if (!this.init) {
this.initializeTreeData(newData, this.expandAll);
this.init = true;
}
},
},
},
methods: {
initializeTreeData(nodes, expanded) {
nodes.forEach((node) => {
this.$set(node, "expanded", expanded); // 使用 $set 確保響應(yīng)式
if (node.children && node.children.length > 0) {
this.initializeTreeData(node.children, expanded); // 遞歸處理子節(jié)點
}
});
},
toggleNode(event, node) {
event.stopPropagation(); // 阻止事件冒泡
node.expanded = !node.expanded; // 切換節(jié)點展開狀態(tài)
},
editNode(event, node) {
event.stopPropagation();
this.$emit("edit-node", node); // 觸發(fā)父組件的 edit-node 事件,并傳遞當前節(jié)點
},
deleteNode(event, node) {
event.stopPropagation();
this.$emit("delete-node", node); // 觸發(fā)父組件的 delete-node 事件,并傳遞當前節(jié)點
},
},
};
</script>
<style scoped>
.tree {
padding-left: 15px;
}
.children {
padding-left: 15px;
}
.tree-node {
display: flex;
align-items: center;
}
.action-button {
cursor: pointer;
margin-left: 10px;
color: #409eff;
}
.edit-button {
float: right;
}
.delete-button {
float: right;
}
</style>在頁面中使用...
<template>
<view class="page">
<Tree
:treeData="treeData"
:expandAll="expandAll"
@edit-node="handleEditNode"
@delete-node="handleDeleteNode"
/>
</view>
</template>
<script>
import Tree from "@/components/TreeData";
export default {
components: {
Tree,
},
data() {
return {
treeData: [
{
label: "根節(jié)點 1",
children: [
{
label: "子節(jié)點 1-1",
children: [
{
label: "子節(jié)點 1-1-1",
children: [],
},
{
label: "子節(jié)點 1-1-2",
children: [],
},
],
},
{
label: "子節(jié)點 1-2",
children: [],
},
],
},
{
label: "根節(jié)點 2",
children: [
{
label: "子節(jié)點 2-1",
children: [],
},
],
},
],
expandAll: true, // 控制是否全部展開
};
},
methods: {
handleEditNode(node) {
console.log("編輯節(jié)點", node);
// 處理編輯節(jié)點的邏輯
},
handleDeleteNode(node) {
console.log("刪除節(jié)點", node);
// 處理刪除節(jié)點的邏輯
},
},
};
</script>
<style scoped>
page {
background-color: #f5f6f8;
}
.page {
padding: 20px;
}
</style>到此這篇關(guān)于uni-app無限級樹形組件簡單實現(xiàn)的文章就介紹到這了,更多相關(guān)uni-app無限級樹形組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vueJS簡單的點擊顯示與隱藏的效果【實現(xiàn)代碼】
下面小編就為大家?guī)硪黄獀ueJS簡單的點擊顯示與隱藏的效果【實現(xiàn)代碼】。小編覺得挺不錯的,現(xiàn)在分享給大家,一起跟隨小編過來看看吧2016-05-05
基于Vue2x實現(xiàn)響應(yīng)式自適應(yīng)輪播組件插件VueSliderShow功能
本文講述的是從開發(fā)一款基于Vue2x的響應(yīng)式自適應(yīng)輪播組件插件的一個全過程,包含發(fā)布到npm,構(gòu)建自己的npm包,供下載安裝使用的技巧,非常不錯,具有一定的參考借鑒價值,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05
Vue項目打包壓縮的實現(xiàn)(讓頁面更快響應(yīng))
這篇文章主要介紹了Vue項目打包壓縮的實現(xiàn)(讓頁面更快響應(yīng)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
詳解如何實現(xiàn)Element樹形控件Tree在懶加載模式下的動態(tài)更新
這篇文章主要介紹了詳解如何實現(xiàn)Element樹形控件Tree在懶加載模式下的動態(tài)更新,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
利用Vue3實現(xiàn)一個可以用js調(diào)用的組件
最近遇到個功能要求,想要在全局中調(diào)用組件,而且要在某些js文件內(nèi)調(diào)用,所以這篇文章主要給大家介紹了關(guān)于如何利用Vue3實現(xiàn)一個可以用js調(diào)用的組件的相關(guān)資料,需要的朋友可以參考下2021-08-08
VueX瀏覽器刷新如何實現(xiàn)保存數(shù)據(jù)
這篇文章主要介紹了VueX瀏覽器刷新如何實現(xiàn)保存數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
vue使用路由守衛(wèi)實現(xiàn)菜單的權(quán)限設(shè)置
我們使?vue-element-admin前端框架開發(fā)后臺管理系統(tǒng)時,?般都會涉及到菜單的權(quán)限控制問題,下面這篇文章主要給大家介紹了關(guān)于vue使用路由守衛(wèi)實現(xiàn)菜單的權(quán)限設(shè)置的相關(guān)資料,需要的朋友可以參考下2023-06-06

