一般社団法人 全国個人事業主支援協会

COLUMN コラム

はじめに

VueのSlotがいつも良くわからなくなるので良く使う使い方についてまとめました。
なお、Nuxt2系とVuetifyを使っています。

基本的な情報は公式ドキュメントを参照して下さい。
https://v2.ja.vuejs.org/v2/guide/components-slots

Slotとは

Slotとはコンポーネントに任意の埋め込みをする機能です。
コンポーネント化したけれど、この部分だけは変えたい。そういう時に使います。

この記事がわかりやすかったです。
https://qiita.com/aLiz/items/d5e41b4cff9a81856715

良く使う使い方

細かな使用方法はこの記事がわかりやすかったです。
https://zenn.dev/kokota/articles/242d9ae4aeae71

デフォルトスロット

一番シンプルな使い方です。
埋め込みたい箇所を<slot />とすることで、コンポーネント使用時に埋め込みたいものを渡すことができます。

“`Label.vue
<template>
<div>
<p class=”label”>{{ label }}</p>
    <slot />
</div>
</template>

“`

“`user-profile.vue
<Label label=”名前”>
<p>名無しの権平</p>
</Label>
<Label label=”ホームページ”>
<a href=”http://example.html”>http://example.html</a>
</Label>
“`

Vuetify

Vuetifyのコンポーネントをカスタマイズするときはslotを使うことが多いです。

例えば、v-data-tableのnameカラムのヘッダーだけ赤色にしたいときは以下のようにします。

“`table.vue
<v-data-table :items=”items” :headers=”headers”>
<template #[`header.name`]=”{ header }”>
<span style=”color: red;”>{{ header.text }}</span>
</template>
</v-data-table>
“`

なお、#[`header.name`]の#v-slot:の省略系である。
また、”{ header }”は分割代入している。

つまり、省略せずに書くと以下のようになる。

“`table.vue
<v-data-table :items=”items” :headers=”headers”>
<template v-slot:[`header.name`]=”props”>
<span style=”color: red;”>{{ props.header.text }}</span>
</template>
</v-data-table>
“`

#[`header.name`]の括弧やバッククォテーションの部分はslot名に.(ピリオド)が使用されている場合の特殊な書き方。
詳しくはこの記事がわかりやすかったです。
https://zenn.dev/kokota/articles/242d9ae4aeae71

また、v-data-tableのslotは他にも色々あるので、詳しくは公式ドキュメントを参照して下さい。
https://v2.vuetifyjs.com/ja/api/v-data-table/#slots

The following two tabs change content below.

植木 宥登

最新記事 by 植木 宥登 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア