摘要:中的其實是有動態(tài)加載次級選項的方法。方法的原理是利用址引用傳遞,動態(tài)修改。其中找到究竟需要在那層添加數(shù)據(jù)就變成一個很麻煩的問題。格式化數(shù)據(jù)格式返回清除方法
element中的cascader其實是有動態(tài)加載次級選項的方法。
方法的原理是利用址(引用)傳遞,動態(tài)修改:options。
var c={name: "bob"} var d=c d.name = "tom" console.log(c) // {name: "tom"}
http://element-cn.eleme.io/#/...
其中找到究竟需要在那層添加數(shù)據(jù)就變成一個很麻煩的問題。
怎么找了?
當然只能遞歸了。
簡化一下大致思路:
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數(shù)組第一個元素以外的全部元素。 if (_.isEmpty(tailRegionArr)) { return regionOption } return this.findRegionOption(regionOption.children, tailRegionArr) }
動態(tài)加載數(shù)據(jù):
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,然后動態(tài)賦值給children。
寫的有點亂,希望有幫助吧。
PS:其中用到的 _.XXX 引入的lodash的庫
再附一個方吧,如果后臺返回的數(shù)據(jù)不符合組件的數(shù)據(jù)類型(children、label、value),可以使用該方法。
/** * 格式化Region數(shù)據(jù)格式 * @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; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103010.html
摘要:中的其實是有動態(tài)加載次級選項的方法。方法的原理是利用址引用傳遞,動態(tài)修改。其中找到究竟需要在那層添加數(shù)據(jù)就變成一個很麻煩的問題。 element中的cascader其實是有動態(tài)加載次級選項的方法。方法的原理是利用址(引用)傳遞,動態(tài)修改:options。 var c={name: bob} var d=c d.name = tom console.log(c) // {name: to...
摘要:中的其實是有動態(tài)加載次級選項的方法。方法的原理是利用址引用傳遞,動態(tài)修改。其中找到究竟需要在那層添加數(shù)據(jù)就變成一個很麻煩的問題。格式化數(shù)據(jù)格式返回清除方法 element中的cascader其實是有動態(tài)加載次級選項的方法。方法的原理是利用址(引用)傳遞,動態(tài)修改:options。 var c={name: bob} var d=c d.name = tom console.log(c)...
摘要:從零開始實現(xiàn)一個級聯(lián)組件本文實現(xiàn)級聯(lián)組件需要用到自定義指令和組件通信相關(guān)知識,最好先閱讀以下兩篇文章自定義指令組件基礎(chǔ)與通信一組件簡介本文實現(xiàn)的是一個省市縣多級聯(lián)動組件,當組件渲染完成后默認會加載出所有的省名稱,當用戶點擊某個省的名稱后,右 從零開始實現(xiàn)一個Vue級聯(lián)組件 本文實現(xiàn)級聯(lián)組件需要用到自定義指令和組件通信相關(guān)知識,最好先閱讀以下兩篇文章: Vue自定義指令 Vue組件基礎(chǔ)與...
摘要:封裝組件系列文章如何實現(xiàn)一個這樣的級聯(lián)組件組件背景根據(jù)產(chǎn)品原型實現(xiàn)一個級聯(lián)組件,下面看演示圖應(yīng)用場景很多,如后臺管理系統(tǒng),旅游系統(tǒng),廣告投放系統(tǒng),營銷系統(tǒng)等,現(xiàn)在流行,,三大框架,下面看看怎么使用實現(xiàn)實現(xiàn)邏輯產(chǎn)品經(jīng)理的評審功能需求如下根據(jù)大 Vue封裝組件系列文章 如何實現(xiàn)一個這樣的級聯(lián)組件 組件背景 根據(jù)產(chǎn)品原型實現(xiàn)一個級聯(lián)組件,下面看演示圖 showImg(https://i.lo...
摘要:利用中間件實現(xiàn)異步請求,實現(xiàn)兩個用戶角色實時通信。目前還未深入了解的一些概念。往后會寫更多的前后臺聯(lián)通的項目。刪除分組會連同組內(nèi)的所有圖片一起刪除。算是對自己上次用寫后臺的一個強化,項目文章在這里。后來一直沒動,前些日子才把后續(xù)的完善。 歡迎訪問我的個人網(wǎng)站:http://www.neroht.com/? 剛學vue和react時,利用業(yè)余時間寫的關(guān)于這兩個框架的訓(xùn)練,都相對簡單,有的...
閱讀 2702·2021-09-09 09:33
閱讀 2874·2019-08-30 15:54
閱讀 2909·2019-08-30 14:21
閱讀 2407·2019-08-29 17:15
閱讀 3621·2019-08-29 16:13
閱讀 2799·2019-08-29 14:21
閱讀 3473·2019-08-26 13:25
閱讀 2071·2019-08-26 12:14