Vue Academy · レッスン

スロットとスコープ付きスロット

スロットとスコープ付きスロットを使って柔軟なコンポーネントを構成します

レッスン 3/313 ステップ

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

スロットとは

スロットを使うと、親コンポーネントから子コンポーネントのテンプレートにコンテンツを注入できます。

  • Propsはデータを渡し、スロットはマークアップを渡します
  • レイアウト用のラッパー、カード、モーダルに適しています
  • コンテンツをどこに配置するかは子コンポーネントが決めます

デフォルトスロット

子コンポーネントはslot要素でプレースホルダーを定義します。親コンポーネントがタグの内側に記述した内容が、その場所に入ります。

<!-- Card.vue (child) -->
<template>
  <div class="card">
    <slot></slot>
  </div>
</template>

デフォルトスロットの使用

親コンポーネントは、コンポーネントのタグの間にコンテンツを渡します。

<!-- Parent -->
<Card>
  <h2>Title</h2>
  <p>Any content goes here.</p>
</Card>

<!-- It renders inside the card div -->

スロットのフォールバックコンテンツ

スロットにはフォールバックコンテンツを用意できます。親コンポーネントから何も渡されなかった場合に表示されます。

<!-- Button.vue -->
<template>
  <button>
    <slot>Click me</slot>
  </button>
</template>

<!-- <Button /> shows "Click me";
     <Button>Save</Button> shows "Save" -->

複数の名前付きスロット

名前付きスロットを使うと、コンポーネントに複数の挿入先を用意できます。

<!-- Layout.vue -->
<template>
  <header><slot name="header"></slot></header>
  <main><slot></slot></main>
  <footer><slot name="footer"></slot></footer>
</template>

名前付きスロットへのコンテンツの挿入

親コンポーネントは、templateタグのv-slot:nameで名前付きスロットを指定します。

<Layout>
  <template v-slot:header>
    <h1>Site Title</h1>
  </template>

  <p>Main content (default slot)</p>

  <template v-slot:footer>
    <small>Copyright 2024</small>
  </template>
</Layout>

v-slotの短縮構文

v-slotには短縮構文があり、#記号を使用します。

<Layout>
  <template #header>
    <h1>Title</h1>
  </template>

  <template #footer>
    <small>Footer</small>
  </template>
</Layout>

スコープ付きスロット

スコープ付きスロットを使うと、子コンポーネントからスロットコンテンツへデータを渡せます。

  • 子コンポーネントはslot要素にデータをバインドします
  • 親コンポーネントはslot propsとしてデータを受け取ります
  • 子コンポーネントがデータを管理し、親コンポーネントが見た目を管理する場合に便利です

子コンポーネントからデータを公開する

子コンポーネントは、スロットに属性をバインドしてデータを共有します。

<!-- UserList.vue -->
<template>
  <li v-for="user in users" :key="user.id">
    <slot :user="user"></slot>
  </li>
</template>

スコープ付きスロットのデータを利用する

親コンポーネントはv-slotを通じてデータを受け取ります。

<UserList>
  <template #default="slotProps">
    {{ slotProps.user.name }}
  </template>
</UserList>

<!-- or destructure: #default="{ user }" -->

各スロットを使う場面

簡単な使い分け:

  • デフォルトスロットは、単純なコンテンツの挿入に使用します
  • 名前付きスロットは、複数の領域(レイアウト)に使用します
  • スコープ付きスロットは、親コンポーネントが子コンポーネント内部のデータを必要とする場合に使用します

理解度チェック

スロットについての理解度を確認しましょう。

まとめ: スロット

スロットによるコンテンツの配布について学びました。

  • デフォルトスロットは、親コンポーネントのマークアップを注入します
  • 何も渡されなかった場合はフォールバックコンテンツが表示されます
  • 名前付きスロット(v-slot:name、短縮構文の#)で領域を指定します
  • スコープ付きスロットは、子コンポーネントのデータをスロットコンテンツへ渡します

次は、リアクティビティの基礎について学びます。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
42
レッスン
156

よくある質問

「スロットとスコープ付きスロット」レッスンは無料ですか?

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

「スロットとスコープ付きスロット」で何を学びますか?

スロットとスコープ付きスロットを使って柔軟なコンポーネントを構成します ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「スロットとスコープ付きスロット」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. コンポーネントの作成と登録
  2. Propsとカスタムイベント
  3. スロットとスコープ付きスロット
← Vue Academyに戻る