2.5.2
https://jsfiddle.net/daxchen/k75y6tu0/
私のユースケースは、ツールバーとメインコンテンツラッパーを備えたデフォルトのレイアウトがあることです。 ただし、 SearchBar
が必要なページと不要なページがあり、レイアウトのレベルが異なる場合があります。
そこで、他のレイアウトで使用するベースとしてLayoutDefault
というコンポーネントを作成しました。 また、必要に応じてデフォルトのツールバーを置き換えられるようにしたいので、フォールバックコンテンツとしてToolbar
て、デフォルトのツールバーを<slot name="toolbar">
に配置します。
コードスニペット:
// LayoutDefault.vue
<slot name="toolbar">
<Toolbar title="title from layout-inner">
<slot name="toolbarSlot"></slot>
</Toolbar>
</slot>
次のことができるようにしたいので、これらの種類のコンポーネントを作成します。
"toolbarSlot"
)そして、他のレイアウトコンポーネントでは、これを行います。
// LayoutLv1.vue
<div class="layout">
<LayoutDefault>
<slot name="toolbar" slot="toolbar"></slot>
<slot name="toolbarSlot" slot="toolbarSlot"></slot>
<slot>default content from Layout</slot>
</LayoutDefault>
</div>
ご覧のとおり、コンポーネントを孫のスロットに渡すために、次のパターンを使用しました: <slot name="foo" slot="foo">
。
何らかの理由で、このパターンを使用して渡されたコンポーネントは、デフォルトのスロットがある場合はます。
複製の例2、3、および4を参照してください。
名前付きスロットに何も渡されない場合、フォールバックコンテンツがレンダリングされ、スロットもレンダリングされると思います。
例2では、置き換えられたToolbar
がLayoutDefault
のデフォルトスロットにレンダリングされます。
例3および4では、 SearchBar
はslot="toolbarSlot"
に渡されますが、レンダリングされません。
これは予想される動作ですか?
または、デフォルトのパーツをそれぞれ交換可能にして、このような再利用可能なレイアウトを作成する方法があり、デフォルトのパーツを使用している場合は、コンポーネントを(デフォルトのパーツ)スロットに渡すことができますか?
わおそれは驚きだ!
クローン作成、構築、テストされた、それは動作します!!
エヴァンあなたは最高です~~~
どうもありがとうございます!!!
ところで、これはすでに2.5.3で出ています:)
これは2.5.3のスロットスコープでも機能しますか? :)
@faragosは、スロットスコープを使用する孫にスロットを渡す方法を示しています。
@ alex-martinezソリューションを投稿してくれてありがとう、それは大きな助けになりました:)
最も参考になるコメント
ところで、これはすでに2.5.3で出ています:)