成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

手風(fēng)琴效果 遞歸組件實(shí)戰(zhàn)(vue)

noONE / 516人閱讀

摘要:大家想想一想這個(gè)組件最終效果形成一個(gè)樹形結(jié)構(gòu)里面有相同的模塊這個(gè)是手風(fēng)琴組件中最小的組件單元。再次點(diǎn)擊節(jié)點(diǎn)就會(huì)開啟子樹。

show 效果

說說我的思路

數(shù)據(jù)結(jié)構(gòu)

{"flag":1,"data":[{"id":1,"name":"書法類型","child":[{"id":2,"name":"硬筆"},{"id":3,"name":"軟筆"}]},{"id":4,"name":"獎(jiǎng)品類型","child":[{"id":5,"name":"文房四寶"}]}]}

本來剛開始做的時(shí)候, 說是做個(gè)兩級(jí)的菜單, 為了加深自己的理解, 特意用遞歸組件模式開發(fā)。做成無限的。減少下次開發(fā)的代碼量。
原理:
假設(shè)本節(jié)點(diǎn)有childs 屬性, 就無限遞歸下去, 直到本節(jié)點(diǎn)沒有childs,結(jié)束遞歸。
大家想想一想:

這個(gè)組件最終效果

形成一個(gè)樹形dom結(jié)構(gòu)(里面有相同的模塊 spreadComp.vue)這個(gè)是 手風(fēng)琴組件 中 最小的組件單元。

里面的組件通信:

我采用 root級(jí)組件與子孫級(jí)組件通信(子孫組件的 事件 會(huì)分發(fā)到 root級(jí)組件, root 級(jí)組件通過更改自身狀態(tài)響應(yīng)事件, 同時(shí)向子孫組件發(fā)送事件),相當(dāng)于 中央集權(quán), 再從中央分發(fā).

重點(diǎn) 怎么知道 當(dāng)前節(jié)點(diǎn)是展開的, 還是關(guān)閉我采用 codeList 及 "01-02-03" 代表 節(jié)點(diǎn) 01 、02 的樹節(jié)點(diǎn)是展開的, 03 是結(jié)束節(jié)點(diǎn)。以此類推。。。

當(dāng)點(diǎn)擊 01-02-03 中 02節(jié)點(diǎn), 02 節(jié)點(diǎn) 就會(huì)關(guān)閉子樹。 再次點(diǎn)擊 02節(jié)點(diǎn) 就會(huì)開啟子樹。

展開動(dòng)畫 關(guān)閉動(dòng)畫.. 仿照 elem 過渡動(dòng)畫效果。(我感覺最難)

show 代碼

事件分發(fā)代碼
// 父子事件 交互
const eventMixin = {}
eventMixin.install = (Vue, options) => {
    Vue.mixin({
        methods: {
// 向父組件 分發(fā)事件
            sendFather (cpName , {event, playLoad}) {
                // 子向父節(jié)點(diǎn)
                let parent = this.$parent
                const root = this.$root
                while (parent.$options.name !== cpName && parent !== root) {
                    parent = parent.$parent
                }
                parent.$emit(event, playLoad)
            },
// 向子孫組件分發(fā)事件
            sendInfiniteCd(cpName, {event, playLoad}) {
                // 最小組件
                const sendChildMsg = (item) => {
                    let mainC = item.$children
                    mainC.map(cmp => {
                        // 獲取組件姓名
                        const name = cmp.$options.name
                        if (name === cpName) {
                            cmp.$emit(event, playLoad)
                            sendChildMsg(cmp)
                        }
                        return
                    })
                }
                // 初始化函數(shù)
                sendChildMsg(this)
            }
        }
    })
}
export default eventMixin

spreadComp index.vue



spreadComp spreadComp.vue



spread spreadTransition.vue
// 借鑒 餓了嗎 過渡組件庫



文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94726.html

相關(guān)文章

  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    pumpkin9 評(píng)論0 收藏0
  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    Carson 評(píng)論0 收藏0
  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開發(fā)和面試問題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    muzhuyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<