Vue自嵌套樹(shù)組件使用方法詳解
本文實(shí)例為大家分享了Vue自嵌套樹(shù)組件的使用方法,供大家參考,具體內(nèi)容如下
效果圖

注意事項(xiàng)
- 組件自嵌套,定義名稱時(shí)就定義為組件名
- 單選和多選用戶時(shí),以最頂級(jí)父組件的屬性為準(zhǔn),由于組件內(nèi)不能同步修改prop,故采用data注冊(cè)另一個(gè)同類型數(shù)值用于接收組件內(nèi)改變,并使用update,同步更新到prop上
- 展開(kāi)組件才開(kāi)始加載用戶列表
<template>
<ul v-show="isShow" ref="user-tree">
<li v-for="(item, idx) in userList" :key="idx">
<div>
<!-- 多選用戶樹(shù) -->
<input
class="primary"
type="checkbox"
v-model="selectUsers1"
:value="item.userId"
v-show="isCheck"
/>
<!-- 單選用戶樹(shù) -->
<span
@click="onSelect(item)"
:style="{
color: selectUser1 == item.userId ? 'red' : '',
cursor: 'pointer',
}"
>
<i class="iconfont icon-user"></i> {{ item.userName }}</span
>
<!-- 展開(kāi)用戶樹(shù) -->
<i
class="iconfont icon-right"
v-if="item.haveChild"
@click="expandItem(idx)"
></i>
</div>
<!-- 嵌套用戶樹(shù) -->
<user-tree
:user-id="item.userId"
v-if="item.haveChild"
:is-show.sync="item.isShow"
:select-user.sync="selectUser1"
:select-users.sync="selectUsers1"
:is-check="isCheck"
></user-tree>
</li>
</ul>
</template>
<script>
export default {
name: "user-tree",//定義為組件名,否則自嵌套時(shí)報(bào)未注冊(cè)自身組件錯(cuò)誤
props: {
isShow: {//是否展開(kāi)用戶列表
type: Boolean,
default: false
},
userId: {//當(dāng)前用戶樹(shù)父級(jí)id
type: Number,
default: 0
},
selectUser: {//當(dāng)前選中的用戶id
type: Number,
default: 0
},
selectUsers: {//多選用戶
type: Array,
default: function () {
return [];
}
},
isCheck: {//是否多選功能
type: Boolean,
default: false
}
},
data: () => ({
userList: [], //用戶列表
selectUser1: 1,//單選用戶
selectUsers1: [],//多選用戶
isLoad: true
}),
watch: {
selectUser1 () {//單選用戶,當(dāng)前級(jí)同步到父級(jí)
if (this.selectUser1 != this.selectUser) {
this.$emit("update:select-user", this.selectUser1);
}
},
selectUser () {//單選用戶,當(dāng)前級(jí)同步于父級(jí)
if (this.selectUser1 != this.selectUser) {
this.selectUser1 = this.selectUser;
}
},
selectUsers1 () {//多選用戶,當(dāng)前級(jí)同步到父級(jí)
if (this.selectUsers1 != this.selectUsers) {
this.$emit("update:select-users", this.selectUsers1);
}
},
selectUsers () {//多選用戶,當(dāng)前級(jí)同步于父級(jí)
if (this.selectUsers1 != this.selectUsers) {
this.selectUsers1 = this.selectUsers;
}
},
isShow () {
if (this.isShow) {
this.getUserList();
}
}
},
methods: {
onSelect (item) {//單選用戶
this.$emit("update:select-user", item.userId);
},
expandItem (idx) {//展開(kāi)用戶樹(shù)
if (this.userList[idx].isShow) {
this.userList[idx].isShow = false;
} else {
this.userList[idx].isShow = true;
}
},
getUserList () {
var list = [];
for (var i = 0; i < 10; i++) {
var userId = Math.round(Math.random() * 10000);
list.push({
userId: userId,
userName: "user-" + userId,
haveChild: i % 2,//是否有子樹(shù)
isShow: false //是否展示子樹(shù)
});
}
this.userList = list;
},
},
mounted () {
if (this.userId == 1) {//當(dāng)前父級(jí)userId為根用戶id,就加載并展開(kāi)用戶樹(shù)
this.getUserList(this.userId);
}
}
};
</script>
使用樹(shù)組件
<div>{{ selectUser }}</div>
<div>
<span v-for="item in selectUsers" :key="item">【{{ item }}】</span>
</div>
<user-tree
:user-id="1"
:is-show="true"
:select-user.sync="selectUser"
:select-users.sync="selectUsers"
:is-check="true"
></user-tree>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue使用refs獲取嵌套組件中的值過(guò)程
- vue中keep-alive組件實(shí)現(xiàn)多級(jí)嵌套路由的緩存
- vue前端開(kāi)發(fā)層次嵌套組件的通信詳解
- vue keep-alive實(shí)現(xiàn)多組件嵌套中個(gè)別組件存活不銷毀的操作
- vue組件中實(shí)現(xiàn)嵌套子組件案例
- 解決vue單頁(yè)面多個(gè)組件嵌套監(jiān)聽(tīng)瀏覽器窗口變化問(wèn)題
- 使用form-create動(dòng)態(tài)生成vue自定義組件和嵌套表單組件
- vue父子組件的嵌套的示例代碼
- Vue 多層組件嵌套二種實(shí)現(xiàn)方式(測(cè)試實(shí)例)
- vue嵌套組件傳參實(shí)例分享
相關(guān)文章
vue2.0 中使用transition實(shí)現(xiàn)動(dòng)畫效果使用心得
這篇文章主要介紹了vue2.0 中使用transition實(shí)現(xiàn)動(dòng)畫效果使用心得,本文通過(guò)案例知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧2018-08-08
vue倒計(jì)時(shí)刷新頁(yè)面不會(huì)從頭開(kāi)始的解決方法
在本篇文章里小編給大家整理的是關(guān)于vue倒計(jì)時(shí)刷新頁(yè)面不會(huì)從頭開(kāi)始的解決方法,需要的朋友們參考下。2020-03-03
詳解vue2.0 使用動(dòng)態(tài)組件實(shí)現(xiàn) Tab 標(biāo)簽頁(yè)切換效果(vue-cli)
本篇文章主要介紹了詳解vue2.0 使用動(dòng)態(tài)組件實(shí)現(xiàn) Tab 標(biāo)簽頁(yè)切換效果(vue-cli),具有一定的參考價(jià)值,有需要的可以了解下2017-08-08
前端虛擬滾動(dòng)列表實(shí)現(xiàn)代碼(vue虛擬列表)
前端的性能瓶頸那就是頁(yè)面的卡頓,當(dāng)然這種頁(yè)面的卡頓包含了多種原因,下面這篇文章主要給大家介紹了關(guān)于前端虛擬滾動(dòng)列表實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
vue router-link傳參以及參數(shù)的使用實(shí)例
下面小編就為大家?guī)?lái)一篇vue router-link傳參以及參數(shù)的使用實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
35個(gè)最好用的Vue開(kāi)源庫(kù)(史上最全)
無(wú)論是開(kāi)發(fā)新手還是經(jīng)驗(yàn)豐富的老手,我們都喜歡開(kāi)源軟件包。本文主要介紹了35個(gè)最好用的Vue開(kāi)源庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
解決vue中監(jiān)聽(tīng)input只能輸入數(shù)字及英文或者其他情況的問(wèn)題
今天小編就為大家分享一篇解決vue中監(jiān)聽(tīng)input只能輸入數(shù)字及英文或者其他情況的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

