封裝成組件
子組件
<template>
<div>
<el-form ref="form" label-width="100px">
<el-form-item :label="label">
<div id="qwe">
<el-select
v-model="_value"
:clearable="true"
placeholder="請選擇"
:style="selectCss"
ref="selectblur"
>
<el-option value="無" style="height: auto">
<el-tree
:data="data"
node-key="id"
:accordion="false"
:props="defaultProps"
@node-click="handleNodeClick"
></el-tree>
</el-option>
</el-select>
</div>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
name: "selectTree",
props: ["data", "defaultProps", "value","label","selectCss"],//[樹,'','',顯示的標簽,輸入框的長度]
computed: {//計算屬性,子組件不能直接更改父組件的值,可以通過計算屬性顯示
_value: {
get() {
return this.value;
},
set(val) {
//this._value=val
}
}
},
methods: {
handleNodeClick(data) {
//樹形選擇
if (data.children === undefined) {
this._value = data.label;
this.$emit("SelectNode", data.label, data); //父組件定義 @SelectNode='父組件接受參數'。 子組件傳遞數據給父組件
this.$refs.selectblur.blur(); //ref 相當於dom選擇器,$refs選取,blur()取消焦點
}
}
}
};
</script>
<style>
.qwe {
margin-left: 200px;
}
</style>
父組件
調用
<selectTree
:data="data"
:defaultProps="defaultProps"
:value="value"
:label="'選擇產品'"
:selectCss="'width: 500px;'"
@SelectNode="ChangeselectTree"
></selectTree>
接受傳遞的值
ChangeselectTree(val, data) {
this.value = val;
// console.log("父組件")
console.log(data)
}
測試組件
<template>
<div>
<el-select v-model="value" :clearable="true" placeholder="請選擇">
<el-option value="無" style="height: auto">
<el-tree :data="data" node-key="id" :accordion="true" @node-click="handleNodeClick"></el-tree>
</el-option>
</el-select>
</div>
</template>
<script>
export default {
data() {
return {
data: [
{
label: "一級 1",
children: [
{
label: "二級 1-1",
children: [
{
label: "三級 1-1-1"
}
]
}
]
},
{
label: "一級 2",
children: [
{
label: "二級 2-1",
children: [
{
label: "三級 2-1-1"
}
]
},
{
label: "二級 2-2",
children: [
{
label: "三級 2-2-1"
}
]
}
]
},
{
label: "一級 3",
children: [
{
label: "二級 3-1",
children: [
{
label: "三級 3-1-1"
}
]
},
{
label: "二級 3-2",
children: [
{
label: "三級 3-2-1"
}
]
}
]
}
],
defaultProps: {
children: "children",
label: "label"
},
value: ""
};
},
methods: {
handleNodeClick(data) {
//樹形選擇
this.value = data.label;
}
}
};
</script>