element UI 中的 el-tree 實(shí)現(xiàn) checkbox 單選框及 bus 傳遞參數(shù)功能
el-tree 單選功能
在日常項(xiàng)目開(kāi)發(fā)中,會(huì)經(jīng)常遇到,樹(shù)形結(jié)構(gòu)的查詢(xún)方式,為了快速方便開(kāi)發(fā),常常會(huì)使用到快捷的ui組件去快速搭樹(shù)形結(jié)構(gòu),這里我用的是 element ui 中的 el-tree 。第一次接觸這種功能的時(shí)候也是各種網(wǎng)站查詢(xún),雖然也都能實(shí)現(xiàn)功能,但是都會(huì)有一些小問(wèn)題,就很難受,那么我們廢話(huà)不多說(shuō)(好像也說(shuō)了不少呢??),直接上效果。

el-tree 單選
html 代碼
*** 注: load 和 lazy 屬性不是需要的粘貼時(shí)請(qǐng)刪除。(只有需要懶加載的樹(shù)才需要,關(guān)于怎樣構(gòu)建懶加載樹(shù)以后的文章會(huì)講到)*** 屬性介紹: 1::props="props" // 下面的 data 代碼中有說(shuō)明。 2:node-key="id" // 這個(gè)屬性是用來(lái)標(biāo)記 tree 的節(jié)點(diǎn)的 實(shí)現(xiàn) checkbox節(jié)點(diǎn)操控 必須搭配 node-key 使用,這里的 id 是根據(jù)數(shù)據(jù)里面的唯一字段定義的,如果你的數(shù)據(jù)里唯一字段為 isId 那就設(shè)置為 node-key="isId"。 3::expand-no-click-node="true" // 為點(diǎn)擊節(jié)點(diǎn)時(shí)是否可展開(kāi)下一級(jí)別,true=展開(kāi)、false=不展開(kāi)。 4:ref="tree" // 定義 ref ,方便操作 dom 節(jié)點(diǎn) ,名字自定義。 5:show-checkbox // 顯示 checkbox 多選框。 6::check-strictly="true" // 解除父子節(jié)點(diǎn)的關(guān)聯(lián),true=解除、false=綁定。 7:@check="checkClick" // checkbox 背點(diǎn)擊的時(shí)候出發(fā)的事件。 <el-tree :props="props" :load="loadNode" lazy node-key="id" :expand-no-click-node="true" ref="tree" show-checkbox :check-strictly="true" @check="checkClick" > </el-tree>
data 部分
export default {
data(){
return{
props:{
label:'text', // 用來(lái)定義 tree 上展示的字段,根據(jù)自己用到數(shù)據(jù),綁定需要的字段名稱(chēng)。
children:'childNodes', // tree 每一級(jí)別節(jié)點(diǎn),子級(jí)數(shù)據(jù),保存的字段位置,根據(jù)自己的數(shù)據(jù),定義字段名稱(chēng)。
isLeaf:'chlid', // 只有需要懶加載 tree 的時(shí)候用到,是用來(lái)確定時(shí)候?yàn)樽詈笠患?jí)別的節(jié)點(diǎn),這樣該節(jié)點(diǎn)被點(diǎn)出來(lái)的時(shí)候,就不會(huì)提示還有下一級(jí)別的三角符號(hào) *注:這里復(fù)制的時(shí)候不要帶上這個(gè)屬性,至于如何時(shí)候后面的文章講到懶加載樹(shù)的時(shí)候會(huì)提到。
id:'id' // 節(jié)點(diǎn)綁定的 id 要和上面 html 標(biāo)簽中的 node-key="id" 屬性設(shè)置的值要對(duì)應(yīng)。
}
}
}
事件方法部分
*** 注:下面方法中的 this.$bus.$emit() 是用來(lái)組件傳遞參數(shù)的。使用方式會(huì)在文章最下面提到。***
methods:{
// 這個(gè)方法默認(rèn)為兩個(gè)參數(shù),第一個(gè)參數(shù)為選中的 checkbox 所在的節(jié)點(diǎn)數(shù)據(jù),第二參數(shù)是目前選中狀態(tài)的集合之類(lèi)的一些數(shù)組集合,因?yàn)槭菃芜x這里不需要這個(gè)參數(shù)。
checkClick(data){
// 先默認(rèn)為多選模式, 獲取目前所有被選中 checkbox 的集合 這里的集合是每個(gè)節(jié)點(diǎn)的數(shù)據(jù)。
let getNode = this.$refs.tree.getCheckedNodes();
// 判斷 getNode 長(zhǎng)度是否大于0,因?yàn)檫@里用到了組件之間的傳值了所有進(jìn)行了判斷,如果小于0,傳遞一個(gè)空的數(shù)據(jù)過(guò)去。(大于0:代表tree中有至少有一個(gè)checkbox被選中。 小于0:代表tree中沒(méi)有一個(gè)checkbox被選中)
if (getNode.length > 0) {
// 循環(huán) getNode 判斷如果當(dāng)前選中 checkbox 中的id 與 getNode 數(shù)組中有相同值的 id 的一項(xiàng),那么就通過(guò) setChecked() 方法設(shè)置這個(gè)一項(xiàng)被選中,其他像項(xiàng)則通過(guò) setChecked() 取消選定
getNode.forEach(item => {
if (data.id == item.id) {
this.$refs.tree.setChecked(item.id , true);
this.$bus.$emit('otherCheck' , item.id)
} else {
this.$refs.tree.setChecked(item.id , false);
}
} )
} else {
this.$bus.$emit('otherCheck' , '')
}
}
}
**
bus 傳參方法的使用方式*
bus 方式傳遞方式多用于 vuex 狀態(tài)層不復(fù)雜的情況,bus只能使用在已存在的組件之間的傳遞參數(shù),如果是給 v-if 的組件使用的話(huà),組件是捕獲不到傳遞信息的(這種情況就需要狀態(tài)層或者緩存來(lái)傳遞參數(shù)了,以后的文章講到),bus 中有三種方法:
$emit: 傳遞參數(shù); $on: 接收參數(shù); $off: 解除監(jiān)聽(tīng)傳參
1、在 vue 項(xiàng)目中使用 bus 傳遞參數(shù),需要在 main.js 中進(jìn)行全局配置
*** main.js *** let bus = new Vue() Vue.prototype.$bus = bus
2、在主動(dòng)傳遞參數(shù)組件中如何傳遞參數(shù)
*** 注:
1、name:自己定義的名字隨便起就行,但是注意在被傳遞組件中要用相同的名字去接收,解除監(jiān)聽(tīng)傳參也是同樣的名字的解除。
2、data:這里的參數(shù)data可以是對(duì)象、字符串、數(shù)字。參數(shù)也可以穿多個(gè),例如 :this.$bus.$emit('name',a,b,c,d);不過(guò)通常情況下,都是出傳一個(gè) data 對(duì)象即可,這樣方便取值和查看。
***
this.$bus.$emit('name',data)
3、被傳遞參數(shù)組件如何接收值
單個(gè)對(duì)象、字符串、數(shù)字等方式接收參數(shù) (***推薦***)
this.$bus.$on('name',res => {
console.log(res)
})
多個(gè)參數(shù)接收方參數(shù) (不推薦)
this.$bus.$on('name'(a,b,c,d) => {
console.log(a,b,c,d)
})
4、解除監(jiān)聽(tīng)傳參
// 可以在組件銷(xiāo)毀前 解除監(jiān)聽(tīng)
beforeDestroy () {
this.$bus.$off('name');
},
到此這篇關(guān)于element UI 中的 el-tree 實(shí)現(xiàn) checkbox 單選框及 bus 傳遞參數(shù)的方法的文章就介紹到這了,更多相關(guān)element UI el-tree單選內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue獲取當(dāng)前點(diǎn)擊的元素并傳值的實(shí)例
下面小編就為大家分享一篇vue獲取當(dāng)前點(diǎn)擊的元素并傳值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue3中使用v-model實(shí)現(xiàn)父子組件數(shù)據(jù)同步的三種方案
這篇文章主要介紹了vue3中使用v-model實(shí)現(xiàn)父子組件數(shù)據(jù)同步的三種方案,如果只有一個(gè)匿名v-model的傳遞的話(huà),可以使用vue3.3新添加的編譯宏,defineModel來(lái)使用,每種方案結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
vue動(dòng)態(tài)刪除從數(shù)據(jù)庫(kù)倒入列表的某一條方法
今天小編就為大家分享一篇vue動(dòng)態(tài)刪除從數(shù)據(jù)庫(kù)倒入列表的某一條方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果全過(guò)程
element-ui官網(wǎng)上有分頁(yè)實(shí)現(xiàn)的功能,簡(jiǎn)單方便又好用,也有很多分頁(yè)的樣式,你可以根據(jù)需要去選擇自己想要的樣式,下面這篇文章主要給大家介紹了關(guān)于Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果的相關(guān)資料,需要的朋友可以參考下2023-04-04
vue3響應(yīng)式對(duì)象的api超全實(shí)例詳解
可以把數(shù)據(jù)變成響應(yīng)式api的方法叫做響應(yīng)式api,下面這篇文章主要給大家介紹了關(guān)于vue3響應(yīng)式對(duì)象api的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vant-ui組件庫(kù)中如何修改NavBar導(dǎo)航欄的樣式
這篇文章主要介紹了vant-ui組件庫(kù)中如何修改NavBar導(dǎo)航欄的樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總
這篇文章主要介紹了html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-11-11

