前言
-
tree樹(shù)結(jié)構(gòu)是在開(kāi)發(fā)中經(jīng)常使用的組件,比如區(qū)域樹(shù),樓層樹(shù),組織架構(gòu)樹(shù),等等包含節(jié)點(diǎn)關(guān)系
-
實(shí)際開(kāi)發(fā)可能需要我們一進(jìn)到頁(yè)面選中樹(shù)形結(jié)構(gòu)第一個(gè)節(jié)點(diǎn),并且調(diào)用數(shù)據(jù),來(lái)達(dá)到用戶(hù)體驗(yàn)
-
在用戶(hù)選擇之后,通過(guò)本地存儲(chǔ)的方式把樓層id存起來(lái),刷新之后獲取樓層id,調(diào)用數(shù)據(jù)
-
或者為了用體驗(yàn)我們需要在選中同時(shí)高亮,在狀態(tài)保持之后,把綁定樓層id節(jié)點(diǎn)高亮提示用戶(hù)
-
萬(wàn)變不離其宗,基于文檔介紹和HTML結(jié)構(gòu)代碼。我們可以通過(guò)2種辦法實(shí)現(xiàn)
第一種-利用默認(rèn)點(diǎn)擊選中會(huì)增加類(lèi)名
-
當(dāng)我們打開(kāi)瀏覽器檢查會(huì)發(fā)現(xiàn),當(dāng)樹(shù)節(jié)點(diǎn)點(diǎn)擊之后。會(huì)在該節(jié)點(diǎn)添加一個(gè)類(lèi)名
-
當(dāng)我們配置好樹(shù)形結(jié)構(gòu)唯一值,默認(rèn)選中數(shù)組,ref之后我們可以通過(guò)在獲取樓層數(shù)據(jù)之后賦值,再通過(guò)偵聽(tīng)器來(lái)偵聽(tīng),當(dāng)察覺(jué)默認(rèn)數(shù)組復(fù)制之后,就通過(guò)document找到這個(gè)類(lèi)名,點(diǎn)擊它,就會(huì)默認(rèn)選中第一個(gè)
-
注意:使用this.$nextTick()避免出現(xiàn)層級(jí)問(wèn)題
-
缺點(diǎn):不管傳入什么值-只會(huì)選中第一個(gè)。應(yīng)為是點(diǎn)擊還會(huì)觸發(fā)樹(shù)結(jié)構(gòu)自帶的收縮
案例代碼如下-可直接復(fù)制
<template>
<div class="box">
? <!-- default-checked-key-默認(rèn)勾選的節(jié)點(diǎn)的 key 的數(shù)組 -->
? <el-tree
? ? ref="myTree"
? ? node-key="id"
? ? :data="data"
? ? :props="defaultProps"
? ? :default-checked-keys="checkedkeys"
? >
? </el-tree>
</div>
</template>
<script>
export default {
data() {
? return {
? ? // 樹(shù)形結(jié)構(gòu)數(shù)據(jù)
? ? data: [
? ? ? {
? ? ? ? id: "0p150",
? ? ? ? name: "深圳QQQQ科技有限公司",
? ? ? ? children: [
? ? ? ? ? {
? ? ? ? ? ? id: 12070579,
? ? ? ? ? ? name: "一樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ? {
? ? ? ? ? ? id: 12075624,
? ? ? ? ? ? name: "二樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ],
? ? ? },
? ? ? {
? ? ? ? id: "0p151",
? ? ? ? name: "wertw",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p152",
? ? ? ? name: "qqqqq",
? ? ? ? children: [
? ? ? ? ? {
? ? ? ? ? ? id: 120725697,
? ? ? ? ? ? name: "一樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ? {
? ? ? ? ? ? id: 1207236195,
? ? ? ? ? ? name: "二樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ],
? ? ? },
? ? ? {
? ? ? ? id: "0p154",
? ? ? ? name: "1231",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p155",
? ? ? ? name: "123",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p156",
? ? ? ? name: "123123",
? ? ? ? children: [],
? ? ? },
? ? ],
? ? // 樹(shù)形結(jié)構(gòu)數(shù)據(jù)配置
? ? defaultProps: {
? ? ? id: "id",
? ? ? label: "name",
? ? ? children: "children",
? ? },
? ? //
? ? checkedkeys: [],
? };
},
// 偵聽(tīng)器
watch: {
? checkedkeys: {
? ? // immediate: true,
? ? handler: function (newVal, oldVal) {
? ? ? if (newVal) {
? ? ? ? this.$nextTick(() => {
? ? ? ? ? // tree樹(shù)結(jié)構(gòu)點(diǎn)擊會(huì)加上下面這個(gè)類(lèi)名
? ? ? ? ? // 如果默認(rèn)全部展開(kāi)-那就會(huì)關(guān)閉
? ? ? ? ? document.querySelector(".el-tree-node__content").click();
? ? ? ? });
? ? ? }
? ? },
? },
},
mounted() {
? // 使用$nextTick 等頁(yè)面加載完畢之后-在選中,防止加載順序問(wèn)題
? this.$nextTick(function () {
? ? // 通過(guò)ref找到樹(shù)節(jié)點(diǎn)
? ? // 通過(guò)樹(shù)結(jié)構(gòu)設(shè)置node-key
? ? // 結(jié)果-選中第一個(gè)
? ? this.checkedkeys.push(this.data[0].id);
? ? // 結(jié)果固定id-選中第一個(gè)
? ? // this.checkedkeys.push('0p150');
? ? // 結(jié)果-子集選中第一個(gè)
? ? // this.checkedkeys.push(12070579);
? ? // 節(jié)點(diǎn)key 結(jié)果選中第一個(gè)
? ? // this.checkedkeys.push(["0p150", 12070579]);
? });
?
? // 結(jié)論:不管傳入什么,只會(huì)通過(guò)偵聽(tīng)器選中樹(shù)結(jié)構(gòu)第一個(gè)
},
};
</script>
<style lang="scss" scoped>
// 點(diǎn)擊選中顏色
</style>
第二種方法-通過(guò)高亮屬性+tree提供api-推薦
-
當(dāng)我們配置好樹(shù)結(jié)構(gòu)唯一值,高亮當(dāng)前節(jié)點(diǎn)屬性,ref之后,
-
我們?cè)讷@取屬性結(jié)構(gòu)數(shù)據(jù)地方取第一個(gè)數(shù)據(jù)id,傳入api,就可以高連當(dāng)前節(jié)點(diǎn)
-
注意:使用this.$nextTick()避免出現(xiàn)層級(jí)問(wèn)題
-
優(yōu)點(diǎn):只需要樹(shù)形結(jié)構(gòu)唯一值id傳入api就可以實(shí)現(xiàn)選中樹(shù)形結(jié)構(gòu)任意節(jié)點(diǎn)并且高亮-符合實(shí)際開(kāi)發(fā)
案例代碼如下-可直接復(fù)制
<template>
<div class="box">
? <!-- default-expand-all-展開(kāi)全部 -->
? <!-- highlight-current- 是否高亮當(dāng)前選中節(jié)點(diǎn) -->
? <el-tree
? ? ref="myTree"
? ? node-key="id"
? ? :data="data"
? ? :props="defaultProps"
? ? highlight-current
? ? default-expand-all
? >
? </el-tree>
</div>
</template>
<script>
export default {
data() {
? return {
? ? // 樹(shù)形結(jié)構(gòu)數(shù)據(jù)
? ? data: [
? ? ? {
? ? ? ? id: "0p150",
? ? ? ? name: "深圳QQQQ科技有限公司",
? ? ? ? children: [
? ? ? ? ? {
? ? ? ? ? ? id: 12070579,
? ? ? ? ? ? name: "一樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ? {
? ? ? ? ? ? id: 12075624,
? ? ? ? ? ? name: "二樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ],
? ? ? },
? ? ? {
? ? ? ? id: "0p151",
? ? ? ? name: "wertw",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p152",
? ? ? ? name: "qqqqq",
? ? ? ? children: [
? ? ? ? ? {
? ? ? ? ? ? id: 120725697,
? ? ? ? ? ? name: "一樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ? {
? ? ? ? ? ? id: 1207236195,
? ? ? ? ? ? name: "二樓",
? ? ? ? ? ? parentId: 0,
? ? ? ? ? ? orderNum: null,
? ? ? ? ? },
? ? ? ? ],
? ? ? },
? ? ? {
? ? ? ? id: "0p154",
? ? ? ? name: "1231",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p155",
? ? ? ? name: "123",
? ? ? ? children: [],
? ? ? },
? ? ? {
? ? ? ? id: "0p156",
? ? ? ? name: "123123",
? ? ? ? children: [],
? ? ? },
? ? ],
? ? // 樹(shù)形結(jié)構(gòu)數(shù)據(jù)配置
? ? defaultProps: {
? ? ? id: "id",
? ? ? label: "name",
? ? ? children: "children",
? ? },
? };
},
mounted() {
? // 使用$nextTick 等頁(yè)面加載完畢之后-在選中,防止加載順序問(wèn)題
? this.$nextTick(function () {
? ? // 通過(guò)ref找到樹(shù)節(jié)點(diǎn)
? ? // 通過(guò)樹(shù)結(jié)構(gòu)設(shè)置node-key,通過(guò)唯一id來(lái)高亮節(jié)點(diǎn)
? ? // setCurrentKey-通過(guò) key 設(shè)置某個(gè)節(jié)點(diǎn)的當(dāng)前選中狀態(tài),使用此方法必須設(shè)置 node-key 屬性
? ? // 這行不會(huì)選中
? ? this.$refs.myTree.setCurrentKey(this.data[0].id);
? ? // 這行會(huì)生效
? ? this.$refs.myTree.setCurrentKey(this.data[0].children[0].id);
? });
},
};
</script>
<style lang="scss" scoped>
// 設(shè)置高亮顏色
::v-deep
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
background-color: #baf !important;
}
</style>
總結(jié):
經(jīng)過(guò)這一趟流程下來(lái)相信你也對(duì) element-tree樹(shù)結(jié)構(gòu)-默認(rèn)選中第一個(gè)節(jié)點(diǎn)高亮-根據(jù)id選中節(jié)點(diǎn)高亮 有了初步的深刻印象,但在實(shí)際開(kāi)發(fā)中我 們遇到的情況肯定是不一樣的,所以我們要理解它的原理,萬(wàn)變不離其宗。加油,打工人!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-708228.html
什么不足的地方請(qǐng)大家指出謝謝 -- 風(fēng)過(guò)無(wú)痕文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-708228.html
到了這里,關(guān)于element-tree樹(shù)結(jié)構(gòu)-默認(rèn)選中第一個(gè)節(jié)點(diǎn)高亮-根據(jù)id選中節(jié)點(diǎn)高亮的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!