Vue.js 2.3の<component v-for="...">
タグを使用して、コンポーネントのリストを動的にレンダリングしています。同期とイベントのある動的Vueコンポーネント
テンプレートは次のようになります。
<some-component v-for="{name, props}, index in modules" :key="index">
<component :is="name" v-bind="props"></component>
</some-component>
modules
配列は、ここに私のコンポーネントdata()
である:
modules: [
{
name: 'some-thing',
props: {
color: '#0f0',
text: 'some text',
},
},
{
name: 'some-thing',
props: {
color: '#f3f',
text: 'some other text',
},
},
],
私は動的に小道具をバインドするv-bind={...}
オブジェクト構文を使用していますし、これは完璧に動作します。また、このアプローチではイベントリスナーをv-on
(と.sync
'd props)とバインドしたいと思いますが、カスタムディレクティブを作成せずに可能かどうかはわかりません。
私はこのように私props
オブジェクトに追加しようとしたが、それはうまくいきませんでした:
props: {
color: '#f3f',
text: 'some other text',
'v-on:loaded': 'handleLoaded', // no luck
'volume.sync': 'someValue', // no luck
},
私の目標は、vuedraggable
とサイドバーのユーザー再オーダーウィジェットを聞かせて、とにそのレイアウトの好みを持続することですウィジェットのいくつかは@event
と.sync
ed prop
である。これは可能ですか?私はどんな提案も歓迎する!
ありがとう!私はカスタムレンダリング機能を実行していないので、私は一読する必要があります。カスタムディレクティブよりも理にかなっているようです。私はそれを試して、それがどうなるか見てみましょう! – DMack
もう一度ありがとう、これは間違いなく正しい方向に私を指しているように見えます。技術的には私の質問に答えますが、私は道に沿っていくつかの合併症を予見しています。私は 'vuedraggable'でそれを使うつもりなので、このカスタムレンダリングされたコンポーネントを' draggable'でラップしますが、すべての変数、コールバックなどは親のスコープに含まれます。どのように私は非厄介な方法でそれらを使用することができますか? (個別の小道具としてすべての単一のvarを渡すことは、このケースでは "乱雑"と感じ、私はここでイベントを処理する方法を知らない)。何かご意見は? – DMack
@DMack複数の変数を渡すことは、 'v-bind =" someObject "'を使うことで比較的簡単に行うことができます。 'someObject'は、キーがコンポーネントのプロパティで値を渡すオブジェクトです。 – Bert