VueJS element 樹形選擇框


封裝成組件

子組件

<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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM