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