標籤:

Vue.js 怎麼讓 B 組件「繼承」 A 組件的 props 屬性?

B組件嵌套包裹A組件, A組件有多個props,而這些props 是 外部傳給 B組件,我不想在B組件裡面重複聲明A組件的props, 請問有沒有更好方法


假設我們有一個 Text 組件,要基於它擴展一個可以指定顏色的 ColoredText,那麼在 vue@2.4.0 以前,我們可以這麼做,來避免重複編碼 props(注意,還是進行了聲明,只是通過引用做了解耦):

// ColoredText.js
import Text from "./Text"
import omit from "lodash"

export default {
components: {
Text
},
template: "&&",
props: {
...Text.props,
color: String
},
computed: {
attrs () {
return omit(this.$props, "color")
}
}
}

在升級 vue@2.4.0 以後可以用這種更簡單的寫法:

// ColoredText.js
import Text from "./Text"

export default {
components: {
Text
},
template: "&&",
props: {
color: String
},
inheritAttrs: false
}

另外,2.4.0 還新增了 $listeners 來方便此類組件擴展。


Vue2.40提供了$attrs方法, 父組件中未被props綁定的屬性可以在子組件中,通過 $attrs獲取。

http://shellming.com/2017/07/23/new-component-communication-methods-in-vue2_40/


子組件們通過父組件通信,但是層級太多的話就十分複雜,這個時候就需要vuex了


vuex?


推薦閱讀:

如何使用vue.js構造modal(彈窗)組件?
掌握現代web前端技術需要從哪裡開始學起?
傳統項目使用Vue時,為了提高性能需要修改Vue源碼,可行嗎?
vue能否勝任比較大型的web應用的開發?
vuex 和 vue-router如何結合使用?

TAG:Vuejs |