中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue?mixins代碼如何復用

發布時間:2022-05-24 17:23:23 來源:億速云 閱讀:177 作者:iii 欄目:開發技術

本篇內容主要講解“vue mixins代碼如何復用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“vue mixins代碼如何復用”吧!

    場景:

    1. 代碼里有很多當前組件需要的純函數,methods過多

    <!-- 主文件 -->
    <template>
        <button @click="clickHandle">button</button>
    </template>
    
    <script>
    export default {
        name: 'PageDemo',
        methods: {
            func1(){},
            func2(){},
            func3(){},
            clickHandle(){
                this.func1();
                this.func2()
                this.func3()
                console.log('button clicked')
            }
        },
    }
    </script>

    如果當前組件不好拆分,就會出現很多函數,代碼會顯得不清晰。 我現在的處理方法是通過mixins混入,參照MVC思想,當前文件的的methods只寫和模板直接引用的處理方法,其他的函數都通過混入方式引用

    // compose-demo.js
    
    export default {
        methods: {
            func1(){},
            func2(){},
            func3(){},
        }
    }
    <template>
        <button @click="clickHandle">button</button>
    </template>
    
    <script>
    // 主文件
    import ComposeDemo from './compose-demo'
    export default {
        name: 'PageDemo',
        mixins: [ComposeDemo],
        methods: {
            clickHandle(){
                this.func1();
                this.func2()
                this.func3()
                console.log('button clicked')
            }
        },
    }
    </script>

    充分利用mixins還有很多優點。

    2. 舉個例子你有一個組件需要拋出兩個數據,直接的v-model不適用。需要采用$emit方法

    // 組件
    <template>
       <input v-model="a" @change="inputChangeHandle"/>
       <input v-model="b" @change="inputChangeHandle" />
    </template>
    
    <script>
    export default {
        name: 'ComponentChild',
        props: {
            propA: {
                type: String
            },
            propB: {
                type: String
            }
        },
        data(){
            return {
                a: this.propA,
                b: this.propB,
            }
        },
        methods: {
           inputChangeHandle(){
               this.$emit('update-data', {a:this.a, b:this.b})
           } 
        }
    }
    </script>
    
    
    // 調用方
    <template>
        <component-child :propA="query.a" :propB="query.b" @update-data="getData"/>
    </template>
    
    <script>
    import ComponentChild from './component-child.vue'
    export default {
        name: 'Page1',
        components: {ComponentChild},
        data(){
            return {
                query: {
                    a: '默認數據a',
                    b: '默認數據b'
                }
            }
        },
        methods: {
            getData(payload) {
                const {a,b}=payload;
                this.query.a = a;
                this.query.b = b;
            }
        }
    }
    </script>

    如果你有多處地方需要用到ComponentChild組件,那每個調用地方都需要寫一個方法來監聽@update-data事件。

    此時,可以這樣改一下

    // 純函數,引入ComponentChild,并且聲明getData方法
    // compose-component-child.js
    
    <script>
    import ComponentChild from './component-child.vue'
    </script>
    export default {
        components: {ComponentChild},
        
        methods: {
            // 通常情況,復用的業務組件都會有同樣的數據結構,都帶有query.a和query.b。如果不一致,那直接在父組件重寫該方法
            getData(payload) {
                const {a,b}=payload;
                this.query.a = a;
                this.query.b = b;
            }
        }
    }
    
    
    
    // 調用方
    <template>
        <component-child :propA="query.a" :propB="query.b" @update-data="getData"/>
    </template>
    
    <script>
    import ComposeComponentChild from './compose-component-child.js'
    export default {
        name: 'Page1',
        mixins: [ComposeComponentChild]
        data(){
            return {
                query: {
                    a: '默認數據a',
                    b: '默認數據b'
                }
            }
        },
        methods: { }
    }
    </script>

    借鑒了Angular的依賴注入,Page不直接聲明、引用Component,而是通過混入Compose直接使用。

    Component組件,Compose引入Component并且注冊Component(聲明額外的方法),Page調用組件混入Compose,就可以可以直接使用Component組件

    3. 同理,可以通過這個方式復用很多data數據,避免模板化的聲明

    比如常用的表格需要一下數據

    <script>
        import {defaultPageSize}from '@/setting'
        export default {
            data(){
                return {
                    tableList: [],
                    pageSize: defaultPageSize,
                    pageNo: 1,
                    totalRecords: 0,
                }
            }
        }
    </script>

    以上數據都可以組裝為一個compose-table.js文件混入到你要使用的地方,當然也可以通過在compose-table引用注冊表格組件。

    到此,相信大家對“vue mixins代碼如何復用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    肃北| 常宁市| 万安县| 嘉义县| 深水埗区| 松滋市| 原阳县| 红安县| 通渭县| 博客| 读书| 开江县| 黄梅县| 平泉县| 玛曲县| 新巴尔虎左旗| 同仁县| 即墨市| 贡山| 巩留县| 寻甸| 剑川县| 华容县| 桂林市| 阳信县| 鹤岗市| 高邮市| 林西县| 务川| 巴里| 怀宁县| 图木舒克市| 共和县| 洞头县| 米林县| 临湘市| 和静县| 白山市| 会昌县| 麻栗坡县| 满洲里市|