3
在Vue.js中覆蓋使用mixins的方法的正確方法是什麼?我知道你可以使用mixin來模擬繼承,但是假設你想擴展一些道具,但是不能完全覆蓋整個道具的價值。正確的方式來覆蓋Vue.js中的屬性和方法?
比如我有一個baseCell,但我也需要有這將是類似的,但功能不同的<td>
S和<th>
S三個分量,所以我創建使用baseCell作爲混入兩個額外的組件。
var baseCell = {
...
props: {
...
initWrapper: {
type: String,
default: 'td'
},
...
},
methods: {..}
};
在組件設置中,道具會完全覆蓋所有的值。
Vue.component('tableHeader', {
mixins: [baseCell],
props: {
initWrapper: {
default: 'th'
}
}
}
我想出了一個合併屬性的解決方案,但它似乎有點哈克,我不知道是否有更好的解決方案。
Vue.component('tableHeader', {
mixins: [baseCell],
props: Object.assign({}, baseCell.props, {
initWrapper: {
default: 'th'
}
})
});
有了這個,我保留了baseCell道具,但是對象中的一些已定義的道具已通過。
文檔https://vuejs.org/v2/guide/mixins.html#Option-Merging明確指出,該組件將採取precendence上合併。因此,您的解決方案似乎非常合理。 –
@DavidL謝謝你看這個問題。我看過那部分文檔,但只是看了一眼。您的評論讓我深入瞭解了源代碼,因此我發現這個問題解決了合併數據和道具的問題... https://github.com/vuejs/vue/issues/2897它看起來像目前的解決方案就是像我現在這樣做。 – kyle
同意,基於這個問題,它絕對看起來像你選擇了正確的解決方案。樂於幫助:) –