欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue之ele多級聯(lián)組件的使用方法詳解

 更新時間:2022年07月15日 15:49:02   作者:不求人0  
這篇文章為大家詳細主要介紹了vue之ele多級聯(lián)組件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue之ele多級聯(lián)組件的使用具體代碼,供大家參考,具體內(nèi)容如下

多級聯(lián)組件的使用

html

<el-cascader
? ? ? ? ref="cascader"
? ? ? ? :options="options"
? ? ? ? @focus="cascaderFocus"
? ? ? ? @change="cascaderChange"
? ? ? ? v-model="cascadeValue"
? ? ? ? :props="propsVal"
? ? ? ? popper-class="cascader"
></el-cascader>

js

data () {
? ? return {
?? ??? ?options : [
? ? ? ? {
? ? ? ? ? value: "01",
? ? ? ? ? label: "科技",
? ? ? ? ? parentValue: "0",
? ? ? ? ? children: [
? ? ? ? ? ? {
? ? ? ? ? ? ? value: "0101",
? ? ? ? ? ? ? label: "半導體",
? ? ? ? ? ? ? parentValue: "01",
? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? value: "010101",
? ? ? ? ? ? ? ? ? label: "環(huán)",
? ? ? ? ? ? ? ? ? parentValue: "0101",
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ],
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? value: "0102",
? ? ? ? ? ? ? label: "半導體2",
? ? ? ? ? ? ? parentValue: "01",
? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? value: "010201",
? ? ? ? ? ? ? ? ? label: "顯1",
? ? ? ? ? ? ? ? ? parentValue: "0102",
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ],
? ? ? ? ? ? },
? ? ? ? ? ? { value: "0103", label: "產(chǎn)業(yè)", parentValue: "01" },
? ? ? ? ? ],
? ? ? ? },
? ? ? ? {value: "02", label: "業(yè)", parentValue: "0" }, // 沒有子集的時候?
? ? ? ? {value: "04", label: "類", parentValue: "0",children: [], }
? ? ? ],
?? ??? ??? ?cascadeValue: [], //級聯(lián)選中的值
?? ??? ??? ?currentIndustry:[],?
? ? ? propsVal: {
? ? ? ? checkStrictly: true,
? ? ? },
? ? };
? },
? methods: {
? ? cascaderFocus(){
?? ??? ??? ?console.log("jiagouFocus");
? ? },
? ? cascaderChange(valArr){
?? ? console.log("jgTreeChange", valArr);
? ? ? this.currentIndustry = valArr
? ? },
? }
? // 重置的時候
? ? reset() {
? ? ? this.$refs.cascader.checkedValue = [];
? ? ? this.$refs.cascader.dropDownVisible = false;
? ? },

css

.cascader .el-scrollbar{
? min-width: 120px!important;
? max-width: 100%;
}
.cascader .el-cascader-node{
? padding: 0 18px 0 0;
? height: 30px;
}
.cascader.el-cascader-node .el-cascader-node__postfix{
? right: 5px;
}
.cascader .el-cascader-node > .el-radio{
? margin-left: 7px;
}

vue 之ele多級聯(lián)組件 添加額外的按鈕

需求:

  • 第一層:集團; 第二層:板塊; 第三層:產(chǎn)業(yè)
  • 在ele多級聯(lián)組件之中,第一層的時候添加一個全部按鈕,點擊第一層的全部的時候,則直接查詢所有集團的數(shù)據(jù);
  • 在ele多級聯(lián)組件之中,第二層的時候添加一個全部按鈕,點擊第二層的全部的時候,則直接查詢所有板塊的數(shù)據(jù);
  • 點擊級聯(lián)的第三層的時候,才加載數(shù)據(jù)!

HTML

  • groupName :則是需要現(xiàn)實的 點擊了第二層的全部的時候,才顯示的!否則的話,走多級聯(lián)三層選中,顯示效果!
  • cascadeValue :級聯(lián)選中的值
  • propsVal : 級聯(lián)動態(tài)加載的配置屬性
  • selectChange : 級聯(lián)選中的時候觸發(fā)的函數(shù)
  • expandChange: 級聯(lián)展開觸發(fā)

目的:點擊級聯(lián)的時候,只是在點擊第二層的時候,獲取到第一層集團的選中的值!

<div class="top_pane_select">
? <div class="group_name" v-if="showGroupName" >{{ groupName }} / 全部</div>
? <el-cascader
? ? ref="cascader"
? ? v-model="cascadeValue"
? ? :props="propsVal"
? ? @change="selectChange"
? ? @expand-change="expandChange"
? ></el-cascader>
</div>

js

data() {
? ? return {
? ? ? propsVal: {
? ? ? // 點擊的時候 觸發(fā)
? ? ? ? expandTrigger: "click",
? ? ? ? // 完整路徑
? ? ? ? emitPath: true,
? ? ? ? // 動態(tài)加載
? ? ? ? lazy: true,
? ? ? ? // 動態(tài)加載的時候 觸發(fā)渲染dom節(jié)點
? ? ? ? lazyLoad: (node, resolve) => {
? ? ? ? ? this.selectLazyLoad(node, resolve);
? ? ? ? },
? ? ? },
? ? ? currentIndustry: [], // 當前產(chǎn)業(yè)
? ? ? groupName:"",// 當選中為 集團 + 第二級 全部的時候 顯示再級聯(lián)菜單
? ? ? firstHomeGroup:[], // 集團的數(shù)據(jù)
? ? ? showGroupName:false,?
? ? ? jtCode:"", // 當前集團選中的code
? ? ? cascadeValue: [], //級聯(lián)選中的值
? ? ?}
? }
? watch: {
? ?? ?// 級聯(lián)選中的值 判斷:當選中的值 為空數(shù)組(也就是查詢所以集團的數(shù)據(jù)時候),調(diào)用級聯(lián)的重置方法!
? ? cascadeValue(newV) {
? ? ? if (newV.length === 0) {
? ? ? ? this.selectReset();
? ? ? }else{
? ? ? ? this.groupName = "";
? ? ? }
? ? },
? ? // 當前選中的產(chǎn)業(yè) 傳遞到子組件的數(shù)據(jù)
? ? currentIndustry(newV){
? ? ? this.currentIndustry = newV;
? ? ? if(newV.length == 0){
? ? ? ? this.groupName = "";
? ? ? ? this.showGroupName = false;
? ? ? }
? ? }
? },
methods: {
?? ?// 創(chuàng)建dom節(jié)點 和 刪除 dom節(jié)點
? ? createDom(dom){
? ? ? let li = document.createElement("li")
? ? ? li.innerHTML = "全部";
? ? ? dom.insertBefore(li, dom.children[0])
? ? ? dom.children[0].style.paddingLeft = "10px";
? ? ? dom.children[0].style.cursor = "pointer";
? ? },
? ? destroyedDom(dom){
? ? ? dom.removeChild(dom.children[0])
? ? },
? ? // 級聯(lián)選擇器 動態(tài)加載數(shù)據(jù)
? ? selectLazyLoad(node, resolve) {
? ? ? const { level } = node;
? ? ? if (level == 0) {
? ? ? ? // 請求集團的數(shù)據(jù)
? ? ? ? getHomeGroup().then(({ data }) => {
? ? ? ? ? this.firstHomeGroup ?= data.dat;
? ? ? ? ? this.renderNode(data, level, resolve);
? ? ? ? });
? ? ? } else if (level == 1) {
? ? ? ? // 請求板塊的數(shù)據(jù)
? ? ? ? let groupNo = node.data ? node.data.value : null; // 拿到選中的第一級的value
? ? ? ? getHomePlate(groupNo).then(({ data }) => {
? ? ? ? ? this.renderNode(data, level, resolve);
? ? ? ? });
? ? ? } else if (level == 2) {
? ? ? ? // 請求產(chǎn)業(yè)的數(shù)據(jù)
? ? ? ? let palteNo = node.data ? node.data.value : null; // 拿到選中的第二級的value
? ? ? ? getHomeIndustry(palteNo).then(({ data }) => {
? ? ? ? ? this.renderNode(data, level, resolve);
? ? ? ? });
? ? ? }
? ? },
? ? // 渲染dom節(jié)點 就是拿到后臺請求的數(shù)據(jù)的時候,渲染dom節(jié)點
? ? renderNode(data, level, resolve) {
? ? ? if (data.code == 0 && data.dat.length > 0) {
? ? ? ? let nodes = data.dat.map((item) => {
? ? ? ? ? return {
? ? ? ? ? ? value: item.code,
? ? ? ? ? ? label: item.name,
? ? ? ? ? ? leaf: level >= 2,
? ? ? ? ? };
? ? ? ? });
? ? ? ? resolve(nodes);
? ? ? ? if( level === 0){
? ? ? ? ? this.$nextTick(() => {
? ? ? ? ? ? let dom = document.querySelector(".el-cascader-panel > .el-scrollbar:nth-child(1) .el-scrollbar__view")
? ? ? ? ? ? this.createDom(dom);
? ? ? ? ? ? dom.children[0].onclick = () => {
? ? ? ? ? ? ? this.jtCode = "";
? ? ? ? ? ? ? this.cascadeValue = [];
? ? ? ? ? ? ? this.currentIndustry = [];
? ? ? ? ? ? ? this.selectChange([]);
? ? ? ? ? ? ? this.$refs.cascader.dropDownVisible = false;
? ? ? ? ? ? ? this.selectReset();
? ? ? ? ? ? }
? ? ? ? ? })
? ? ? ? }
? ? ? }
? ? },
? ? // 級聯(lián)展開 只為創(chuàng)建最新的dom節(jié)點
? ? expandChange(item){
? ? ? // console.log('展開item',item);
? ? ? if(item.length === 1){
? ? ? ? this.$nextTick(() => {
? ? ? ? ? let dom = document.querySelector(".el-cascader-panel > .el-scrollbar:nth-child(2) .el-scrollbar__view");
? ? ? ? ? if(dom.children[0].innerText == "全部"){
? ? ? ? ? ? this.destroyedDom(dom);
? ? ? ? ? ? this.createDom(dom);
? ? ? ? ? ? this.groupClick(item);
? ? ? ? ? }else{
? ? ? ? ? ? this.createDom(dom);
? ? ? ? ? ? this.groupClick(item);
? ? ? ? ? }
? ? ? ? })
? ? ? }
? ? },
? ? // 點擊 集團的時候 創(chuàng)建 全部 按鈕
? ? groupClick(item){
? ? ? this.$nextTick(() => {
? ? ? ? let dom = document.querySelector(".el-cascader-panel > .el-scrollbar:nth-child(2) .el-scrollbar__view");
? ? ? ? if(dom.children[0]){
? ? ? ? ? dom.children[0].onclick = () => {
? ? ? ? ? ? this.jtCode = item[0];
? ? ? ? ? ? this.currentIndustry = [this.jtCode, ""];
? ? ? ? ? ? // this.selectChange(this.currentIndustry);
? ? ? ? ? ? this.firstHomeGroup.forEach(item => {
? ? ? ? ? ? ? if(item.code == this.jtCode){
? ? ? ? ? ? ? ? this.groupName = item.name;
? ? ? ? ? ? ? ? this.showGroupName = true;
? ? ? ? ? ? ? }
? ? ? ? ? ? })
? ? ? ? ? ? this.selectReset();
? ? ? ? ? ? this.$refs.cascader.dropDownVisible = false;
? ? ? ? ? }
? ? ? ? }
? ? ? })
? ? },
? ? // 級聯(lián)選中的時候 對數(shù)據(jù)的判斷!
? ? selectChange(item) {
? ? ? // console.log("級聯(lián)選中item", item,item.length);
? ? ? // this.currentIndustry = item[item.length - 1];
? ? ? if(item.length == 3){
? ? ? ? this.currentIndustry = item;
? ? ? ? this.showGroupName = false;
? ? ? ? this.groupName = "";
? ? ? } else {
? ? ? ? if(this.jtCode){
? ? ? ? ? this.currentIndustry = [this.jtCode,""];
? ? ? ? }else{
? ? ? ? ? this.currentIndustry = [];
? ? ? ? }
? ? ? }
? ? },
? ? // 級聯(lián)下拉菜單 重置
? ? selectReset() {
? ? ? const _cascader = this.$refs.cascader;
? ? ? if (_cascader) {
? ? ? ? _cascader.$refs.panel.checkedValue = [];
? ? ? ? _cascader.$refs.panel.activePath = [];
? ? ? ? _cascader.$refs.panel.syncActivePath();
? ? ? }
? ? ? let dom = document.querySelector(".el-cascader-panel > .el-scrollbar:nth-child(2) .el-scrollbar__view");
? ? ? if(dom){
? ? ? ? if(dom.children[0].innerText == "全部" && dom.children[0]){
? ? ? ? ? dom.removeChild(dom.children[0])
? ? ? ? }
? ? ? }
? ? },

},

CSS

.top_pane_select {
? ? ? ? ? position: relative;
? ? ? ? ? margin-top: 2px;
? ? ? ? ? margin-left: 115px;
? ? ? ? ? width: 240px;
? ? ? ? ? height: 24px;
? ? ? ? ? border: 1px solid #e82323;
? ? ? ? ? border-radius: 2px;
? ? ? ? ? overflow: hidden;

? ? ? ? ? ::v-deep .el-cascader {
? ? ? ? ? ? top: -8px !important;
? ? ? ? ? ? width: 240px!important;

? ? ? ? ? ? .el-input__inner {
? ? ? ? ? ? ? color: #e82323;
? ? ? ? ? ? ? border: none !important;
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? ? // 單獨選中 集團的時候 顯示
? ? ? ? ? .group_name{
? ? ? ? ? ? background: #fff;
? ? ? ? ? ? z-index: 10;
? ? ? ? ? ? position: absolute;
? ? ? ? ? ? top: 2px;
? ? ? ? ? ? left: 15px;
? ? ? ? ? ? width: 40%;
? ? ? ? ? ? height: 22px;
? ? ? ? ? ? line-height: 22px;
? ? ? ? ? ? color: #e82323;
? ? ? ? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解Vue.js中.native修飾符

    詳解Vue.js中.native修飾符

    這篇文章主要介紹了Vue.js中.native修飾符,給普通的HTML標簽監(jiān)聽一個事件,之后添加 .native 修飾符是不會起作用的。需要的朋友可以參考下
    2018-04-04
  • vue實現(xiàn)彈框遮罩點擊其他區(qū)域彈框關閉及v-if與v-show的區(qū)別介紹

    vue實現(xiàn)彈框遮罩點擊其他區(qū)域彈框關閉及v-if與v-show的區(qū)別介紹

    vue如何簡單的實現(xiàn)彈框,遮罩,點擊其他區(qū)域關閉彈框, 簡單的思路是以一個div作為遮罩,這篇文章給大家詳細介紹了vue實現(xiàn)彈框遮罩點擊其他區(qū)域彈框關閉及v-if與v-show的區(qū)別介紹,感興趣的朋友一起看看吧
    2018-09-09
  • 詳解vue-router 2.0 常用基礎知識點之導航鉤子

    詳解vue-router 2.0 常用基礎知識點之導航鉤子

    本篇文章主要介紹了vue-router 2.0 常用基礎知識點之導航鉤子,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vue watch響應數(shù)據(jù)實現(xiàn)方法解析

    Vue watch響應數(shù)據(jù)實現(xiàn)方法解析

    這篇文章主要介紹了Vue watch響應數(shù)據(jù)實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Vue?路由傳參加密的示例代碼

    Vue?路由傳參加密的示例代碼

    這篇文章主要介紹了Vue?路由傳參加密,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • vue使用AES.js的步驟詳解

    vue使用AES.js的步驟詳解

    AES對數(shù)據(jù)傳輸加密、解密處理---AES.js,下面分步驟給大家介紹vue使用AES.js的示例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • Vue項目部署到IIS后刷新報錯404的問題及解決方法

    Vue項目部署到IIS后刷新報錯404的問題及解決方法

    這篇文章主要介紹了Vue項目部署到IIS后,刷新報錯404,這里需要用到URL重寫工具?--URL?Rewrite,需要的話需要自己下載安裝,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Element Plus實現(xiàn)Affix 固釘

    Element Plus實現(xiàn)Affix 固釘

    本文主要介紹了Element Plus實現(xiàn)Affix 固釘,Affix組件用于將頁面元素固定在特定可視區(qū)域,文中通過示例代碼介紹的非常詳細,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue實現(xiàn)用戶長時間不操作自動退出登錄功能的實現(xiàn)代碼

    vue實現(xiàn)用戶長時間不操作自動退出登錄功能的實現(xiàn)代碼

    這篇文章主要介紹了vue實現(xiàn)用戶長時間不操作自動退出登錄功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • vue與iframe頁面數(shù)據(jù)互相通信的實現(xiàn)示例

    vue與iframe頁面數(shù)據(jù)互相通信的實現(xiàn)示例

    這篇文章主要給大家介紹了vue與iframe頁面數(shù)據(jù)互相通信的實現(xiàn)示例,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12

最新評論