摘要:中的其實是有動態加載次級選項的方法。方法的原理是利用址引用傳遞,動態修改。其中找到究竟需要在那層添加數據就變成一個很麻煩的問題。格式化數據格式返回清除方法
element中的cascader其實是有動態加載次級選項的方法。
方法的原理是利用址(引用)傳遞,動態修改:options。
var c={name: "bob"} var d=c d.name = "tom" console.log(c) // {name: "tom"}
http://element-cn.eleme.io/#/...
其中找到究竟需要在那層添加數據就變成一個很麻煩的問題。
怎么找了?
當然只能遞歸了。
簡化一下大致思路:
var a = [ { value: "2", children: [ { value: "2-1", children: [ { value: "2-1-1", children: [], }, ], }, { value: "2-2", children: [ { value: "2-2-1", children: [], }, { value: "2-2-2", children: [ { value: "2-2-2-1", children: [], }, ], }, ], }, ], }, ] var b = ["2","2-2","2-2-1"]
那么我們就需要通過b找到a所在的位置。
a[0].children[1].children[0] { value: "2-2-1", children: [], },
然后再賦值:
a[0].children[1].children[0].children = [{value: "2-2-1-1",children: []}] console.log(a)
編寫function:
findRegionOption(regionOptions, regionArr) { if (_.isEmpty(regionArr) || _.isEmpty(regionOptions)) { return null } let regionId = _.first(regionArr) let regionOption = _.find(regionOptions, regionOption => { return regionOption.value === regionId }) if (!regionOption) { return null } let tailRegionArr = _.tail(regionArr) // lodash的tail方法,獲取除了array數組第一個元素以外的全部元素。 if (_.isEmpty(tailRegionArr)) { return regionOption } return this.findRegionOption(regionOption.children, tailRegionArr) }
動態加載數據:
loadRegionChild(regionIdArr) { let regionOptions = this.regionHiera let regionOptionInUI = this.findRegionOption(regionOptions, regionIdArr) if ( !regionOptionInUI || !regionOptionInUI.children || regionOptionInUI.children.length > 0 ) { return null } let regionKey = _.last(regionIdArr) if (!regionKey) { return null } api .getRegionHiera(regionKey) .then(res => { regionOptionInUI.children = res.data }) }
整個頁面代碼大致就是:
整體思路還是找到點擊后的region,然后動態賦值給children。
寫的有點亂,希望有幫助吧。
PS:其中用到的 _.XXX 引入的lodash的庫
再附一個方吧,如果后臺返回的數據不符合組件的數據類型(children、label、value),可以使用該方法。
/** * 格式化Region數據格式 * @param [] * @return [] // 返回清除listener方法 */ function transRegion(regionInfo) { if (!regionInfo) { return null; } let regionId = regionInfo.regionId; let regionName = regionInfo.name; let children = _.map(regionInfo.children, child => { return transRegion(child); }); var res = { label: regionName, value: regionId, children: children }; return res; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103010.html
摘要:中的其實是有動態加載次級選項的方法。方法的原理是利用址引用傳遞,動態修改。其中找到究竟需要在那層添加數據就變成一個很麻煩的問題。 element中的cascader其實是有動態加載次級選項的方法。方法的原理是利用址(引用)傳遞,動態修改:options。 var c={name: bob} var d=c d.name = tom console.log(c) // {name: to...
摘要:中的其實是有動態加載次級選項的方法。方法的原理是利用址引用傳遞,動態修改。其中找到究竟需要在那層添加數據就變成一個很麻煩的問題。格式化數據格式返回清除方法 element中的cascader其實是有動態加載次級選項的方法。方法的原理是利用址(引用)傳遞,動態修改:options。 var c={name: bob} var d=c d.name = tom console.log(c)...
摘要:從零開始實現一個級聯組件本文實現級聯組件需要用到自定義指令和組件通信相關知識,最好先閱讀以下兩篇文章自定義指令組件基礎與通信一組件簡介本文實現的是一個省市縣多級聯動組件,當組件渲染完成后默認會加載出所有的省名稱,當用戶點擊某個省的名稱后,右 從零開始實現一個Vue級聯組件 本文實現級聯組件需要用到自定義指令和組件通信相關知識,最好先閱讀以下兩篇文章: Vue自定義指令 Vue組件基礎與...
摘要:封裝組件系列文章如何實現一個這樣的級聯組件組件背景根據產品原型實現一個級聯組件,下面看演示圖應用場景很多,如后臺管理系統,旅游系統,廣告投放系統,營銷系統等,現在流行,,三大框架,下面看看怎么使用實現實現邏輯產品經理的評審功能需求如下根據大 Vue封裝組件系列文章 如何實現一個這樣的級聯組件 組件背景 根據產品原型實現一個級聯組件,下面看演示圖 showImg(https://i.lo...
摘要:利用中間件實現異步請求,實現兩個用戶角色實時通信。目前還未深入了解的一些概念。往后會寫更多的前后臺聯通的項目。刪除分組會連同組內的所有圖片一起刪除。算是對自己上次用寫后臺的一個強化,項目文章在這里。后來一直沒動,前些日子才把后續的完善。 歡迎訪問我的個人網站:http://www.neroht.com/? 剛學vue和react時,利用業余時間寫的關于這兩個框架的訓練,都相對簡單,有的...
閱讀 2659·2021-09-09 09:33
閱讀 2814·2019-08-30 15:54
閱讀 2873·2019-08-30 14:21
閱讀 2361·2019-08-29 17:15
閱讀 3586·2019-08-29 16:13
閱讀 2764·2019-08-29 14:21
閱讀 3431·2019-08-26 13:25
閱讀 2033·2019-08-26 12:14