vue中$listeners的使用


vue中$listeners的使用 

定義:

包含了父作用域中的 (不含 .native 修飾器的) v-on 事件監聽器。它可以通過 v-on="$listeners" 傳入內部組件——在創建更高層次的組件時非常有用。

理解:

所謂$listeners其實就相當於一個中間件,當出現多級組件嵌套時,孫組件想傳遞數據給爺組件,那么就需要在父組件中給孫組件設置v-on="$listeners",然后通過@鍵的方式監聽孫組件傳遞過來的數據。

為什么要用$listeners?

因為$listeners可以很好的解決在多級組件嵌套中,組件C傳給組件A傳遞數據的問題。

$attrs和$listeners的使用場景:

對一些UI庫進行二次封裝用,比如element-ui,里面的組件不能滿足自己的使用場景的時候,會二次封裝,但是又想保留他自己的屬性和方法,那么這個時候時候$attrs和$listners是個完美的解決方案。

簡單的例子,對el-button二次封裝

<template>
    <el-button v-on="$listeners" v-bind="$attrs" :loading="loading" @click="myClick">
        <slot></slot>
    </el-button>
</template>

<script>
export default {
    name: 'mButton',
    inheritAttrs: false,
    props: {
        debounce: {
            type: [Boolean, Number]
        }
    },
    data() {
        return {
            timer: 0,
            loading: false
        }
    },
    methods: {
        myClick() {
            if (!this.debounce) return
            this.loading = true
            clearTimeout(this.timer)
            this.timer = setTimeout(
                () => {
                    this.loading = false
                },
                typeof this.debounce === 'boolean' ? 500 : this.debounce
            )
        }
    }
}
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM