0Pricing
Vue Academy · レッスン

名前付きスロットとデフォルトスロット

複数の 、 、省略記法#nameについて学習します。

「名前付きスロットとデフォルトスロット」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

スロットとは

スロットを使うと、親コンポーネントから子コンポーネントへマークアップを渡せます。子コンポーネントは<slot>要素を使って、そのコンテンツを表示する場所を決めます。これがVueのコンテンツ配信です。

デフォルトスロット

名前のない<slot>はデフォルトスロットです。親がコンポーネントタグの間に配置した内容は、そこに表示されます。

<!-- Card.vue -->
<div class="card">
  <slot></slot>
</div>

デフォルトスロットを使う

親では、コンポーネントタグの内側にコンテンツを入れるだけです。

<Card>
  <p>This goes into the default slot</p>
</Card>

名前付きスロットを使う理由

多くのコンポーネントには、ヘッダー、本文、フッターなど複数の挿入先があります。名前付きスロットを使うと、それぞれの領域に識別子を付け、親から個別に指定できます。

名前付きスロットを宣言する

各スロットにname属性を追加します。1つのコンポーネントで、名前付きスロットとデフォルト(名前なし)スロットを組み合わせることもできます。

<!-- Card.vue -->
<div class="card">
  <header><slot name="header"></slot></header>
  <main><slot></slot></main>
  <footer><slot name="footer"></slot></footer>
</div>

v-slotで名前付きスロットに内容を渡す

親では、v-slot:nameディレクティブを指定した<template>でコンテンツを囲み、名前付きスロットを対象にします。

<Card>
  <template v-slot:header>
    <h2>Title</h2>
  </template>
  <template v-slot:footer>
    <button>OK</button>
  </template>
</Card>

#のショートハンド

v-slot:にはショートハンドとして#があります。そのため、v-slot:headerは#headerと書けます。こちらが慣用的で簡潔な形式です。

<Card>
  <template #header>
    <h2>Title</h2>
  </template>
</Card>

タグ間のデフォルトコンテンツ

コンポーネントタグの間に直接配置したコンテンツ(名前付きのtemplate内ではないもの)は、デフォルトスロットに渡されます。#defaultを使って明示的に指定することもできます。

<Card>
  <p>Implicit default slot content</p>
  <template #footer>Footer</template>
</Card>

暗黙的指定と明示的指定の組み合わせ

同じ使用箇所で、デフォルトコンテンツをそのまま記述し、名前付きスロットをtemplateで指定できます。Vueは名前に基づいて、それぞれの内容を正しい場所へ振り分けます。

<Card>
  <template #header><h2>Header</h2></template>
  Body text right here
  <template #footer>Footer</template>
</Card>

描画順序

親でのスロットの順序は関係ありません。最終的なレイアウトは子のtemplateが決めます。スロットのコンテンツは、子が対応する<slot>を配置した場所に必ず表示されます。

実用的なレイアウトコンポーネント

名前付きスロットを使うと、再利用可能なレイアウトの外枠を作れます。1つの<BaseLayout>で、header、sidebar、main contentのスロットを受け取り、さまざまなページを構成できます。

<!-- BaseLayout.vue -->
<header><slot name="header" /></header>
<aside><slot name="sidebar" /></aside>
<main><slot /></main>

クイックチェック

v-slot:headerのショートハンドは何ですか。

振り返り

スロットを使って、親のマークアップを子に配信する方法を学びました。名前のない<slot>はデフォルトスロットで、nameを追加すると名前付きスロットになります。親は<template v-slot:name>または#nameのショートハンドで内容を渡し、最終的な配置は子のtemplateが決めます。

よくある質問

「名前付きスロットとデフォルトスロット」レッスンは無料ですか?

はい。「名前付きスロットとデフォルトスロット」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「名前付きスロットとデフォルトスロット」で何を学びますか?

複数の 、 、省略記法#nameについて学習します。 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「名前付きスロットとデフォルトスロット」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 名前付きスロットとデフォルトスロット
  2. スコープ付きスロット:親へのデータ受け渡し
  3. 動的なスロット名
  4. スロットのフォールバックコンテンツとスロットの確認
← Vue Academyに戻る