2016-11-16 7 views
3

Vue.jsでmixinsを使用してメソッドをオーバーライドする適切な方法は何ですか?私はミックスインを使って継承を模擬することができると知っていますが、いくつかの小道具を拡張したいが、小道具全体の価値を完全に上書きするわけではないとしましょう。Vue.jsのプロパティとメソッドをオーバーライドする適切な方法は?

たとえば、私はbaseCellを持っていますが、同様の機能を持つが、<td><th>のために機能が異なる必要があるので、mixinとしてbaseCellを使用する2つの追加コンポーネントを作成します。

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の小道具を保持するが、オブジェクト内のいくつかの定義されたものが渡されます。

+1

ドキュメントhttps://vuejs.org/v2/guide/mixins.html#Option-Mergingはっきりとそのコンポーネントがも優先に取ると述べています合併する。その結果、あなたのソリューションはかなり妥当と思われます。 –

+0

@DavidL質問をご覧いただきありがとうございます。私はドキュメントのその部分を見ていたが、それを見渡しただけだった。あなたのコメントは、私がソースを少し深く掘り下げた結果、データと小道具をマージするという問題に対処するこの問題を発見しました... https://github.com/vuejs/vue/issues/2897現在の解決策は、私が現在行っていることです。 – kyle

+1

合意しました。その問題に基づいて、あなたは正しい解決策を選んだようです。助けて嬉しいです:) –

答えて

0

Vue> 2.2では、カスタムオプションのマージ戦略を使用して、必要なものを達成することができます。この戦略はすべてのミックスインに適用されます。

例はドキュメンタリーではここで見つけることができます: https://vuejs.org/v2/guide/mixins.html#Custom-Option-Merge-Strategies

関連する問題