vue+element樹(shù)形選擇器組件封裝和使用方式
vue+element樹(shù)形選擇器組件封裝和使用
演示效果


子組件
<template>
<div>
<el-input
v-model="value"
@focus="showTree"
:placeholder="placeholder"
suffix-icon="el-icon-arrow-down"
readonly
/>
<el-tree
v-if="treeShow"
:data="data"
:node-key="nodeKey"
default-expand-all
:props="defaultProps"
accordion
@node-click="handleNodeClick"
>
</el-tree>
</div>
</template>
<script>
export default {
data() {
return {
treeShow: false,
};
},
props: {
// input的值
value: {
type: String,
},
// 提示語(yǔ)
placeholder: {
type: String,
default: "請(qǐng)點(diǎn)擊",
},
// 樹(shù)節(jié)點(diǎn)數(shù)據(jù)
data: {
type: Array,
},
// 節(jié)點(diǎn)的key
nodeKey: {
type: String,
default: "id",
},
// 樹(shù)的props
defaultProps: {
type: Object,
default: {
children: "children",
label: "name",
},
},
// 方法
handleData: {
type: Function,
},
},
methods: {
// 點(diǎn)擊方法
handleNodeClick(data) {
this.treeShow = false;
this.handleData(data);
},
// 顯示樹(shù)
showTree() {
this.treeShow = !this.treeShow;
},
},
// 監(jiān)聽(tīng)value數(shù)據(jù),解決組件傳值沒(méi)實(shí)時(shí)更新問(wèn)題
watch: {
value: {
handler: function (v, ov) {
this.value = v;
},
deep: true,
immediate: true,
},
},
};
</script>
<style lang="scss" scoped></style>
父組件
<treeSelect
:value="form.parentName"
placeholder="點(diǎn)擊獲取父級(jí)區(qū)域"
:data="treeList"
:defaultProps="defaultProps"
:handleData="receiveData"
></treeSelect>
export default{
//組件引入
components: {
treeSelect: () => import("../components/treeSelect.vue"),
},
//
data(){
return {
form: {},
treeShow: false,
treeList: [],
defaultProps: {
children: "children",
label: "name",
},
}
},
methods:{
receiveData(data) {
console.log("接收數(shù)據(jù):", data);
// 需要使用$set設(shè)置
this.$set(this.form, "parentName", data.name);
this.$set(this.form, "parentId", data.id);
},
// 獲取樹(shù)的接口
treeRegion() {
let params = {};
treeRegion(params).then((res) => {
this.treeList = res.data;
});
},
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
axios無(wú)法加載響應(yīng)數(shù)據(jù):no?data?found?for?resource?with?given?i
最近在在做一個(gè)小查詢功能的時(shí)候踩了一個(gè)坑,所以這篇文章主要給大家介紹了關(guān)于axios無(wú)法加載響應(yīng)數(shù)據(jù):no?data?found?for?resource?with?given?identifier報(bào)錯(cuò)的解決方法,需要的朋友可以參考下2022-11-11
基于vue+element實(shí)現(xiàn)全局loading過(guò)程詳解
這篇文章主要介紹了基于vue+element實(shí)現(xiàn)全局loading過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
vue動(dòng)畫(huà)之點(diǎn)擊按鈕往上漸漸顯示出來(lái)的實(shí)例
今天小編就為大家分享一篇vue動(dòng)畫(huà)之點(diǎn)擊按鈕往上漸漸顯示出來(lái)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
vue 判斷兩個(gè)時(shí)間插件結(jié)束時(shí)間必選大于開(kāi)始時(shí)間的代碼
這篇文章主要介紹了vue 判斷兩個(gè)時(shí)間插件結(jié)束時(shí)間必選大于開(kāi)始時(shí)間的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
uniapp開(kāi)發(fā)打包成H5部署到服務(wù)器的詳細(xì)步驟
前端使用uniapp開(kāi)發(fā)項(xiàng)目完成后,需要將頁(yè)面打包,生成H5的靜態(tài)文件,部署在服務(wù)器上這樣通過(guò)服務(wù)器鏈接地址,直接可以在手機(jī)上點(diǎn)開(kāi)來(lái)訪問(wèn),下面小編給大家講解uniapp開(kāi)發(fā)打包成H5部署到服務(wù)器的步驟,感興趣的朋友一起看看吧2022-11-11
iview中實(shí)現(xiàn)this.$Modal.confirm自定義彈出框換行加樣式
這篇文章主要介紹了iview中實(shí)現(xiàn)this.$Modal.confirm自定義彈出框換行加樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue中 process.env與process.VUE_CLI_SERVICE詳解
這篇文章主要介紹了vue中process.env與process.VUE_CLI_SERVICE的相關(guān)資料,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05

