1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vue.js】slotタグを使ってhtmlタグを親コンポーネントで定義し、子コンポーネントに渡す【slot】

Last updated at Posted at 2021-01-19

#参考
Udemy参考動画:https://www.udemy.com/course/vue-js-complete-guide/
講師 : よしぴー(Yoshipi)さん

__Vue.js__で__slot__タグを使って__htmlタグを親コンポーネントで定義__する方法をご紹介します。

#通常
子コンポーネント : ChildComponent

//ChildComponent

<template>
  <div>
    <p>{{ title }}</p>
  </div>
</template>


<script>
export default {
  data() {
    return {
      title,
    };
  }
};
</script>

親コンポーネント App.Vue

//App.Vue

<template>
  <div>
    <ChildComponent :title="タイトル"></ChildComponent>
  </div>
</template>

<script>
import ChildComponent from "./components/ChildComponent.vue";

export default {
  components: {
    ChildComponent,
  },  
};
</script>

##結果

タイトル

__値__や__プロパティ__を渡し、__タグ__は__子コンポーネント__で定義する。

#スロット

  • タグを__親コンポーネント__で__定義__できる
  • 対応 : ver2.6.0~

子コンポーネント : ChildComponent

//ChildComponent

<template>
  <div>
    <slot></slot>
  </div>
</template>

親コンポーネント : App.Vue

//App.Vue

<template>
  <div>
    <ChildComponent>
    <template>
          <p>タイトル</p>
      <template>
    </ChildComponent>
  </div>
</template>

##結果

タイトル

コンポーネント内の__templateタグ__と子コンポーネントの__slotタグが対応__

#デフォルト
__slotの数__だけ__templateが生成__されるため、__slotタグを複数置く__と同じ__内容が連続__して表示される

デフォルトの仕様ということで__フォールバックコンテンツ__と呼ばれる。

例えば、
子コンポーネント : ChildComponent

//ChildComponent

<template>
  <div>
    <slot></slot>
    <slot></slot>
    <slot></slot>
    <slot></slot>
  </div>
</template>

##結果

タイトル
タイトル
タイトル
タイトル

#スコープ

  • インスタンス内(親コンポーネント内)
  • CSSは例外 : 親コンポーネントのスタイルが優先的に働く

#名前付きslot

  • slot : name属性(子コンポーネント)
  • template : v-slot(親コンポーネント)

name__の値と__v-slot__の引数が__対応
注意:nameは__値__、v-slotは__引数__

子コンポーネント : ChildComponent

//ChildComponent

<template>
  <div>
    <slot name="title"></slot>
    <slot name="name"></slot>
  </div>
</template>

親コンポーネント : App.Vue

//App.Vue

<template>
 <div>
   <ChildComponent>
    <template v-slot:title>
         <p>タイトル</p>
     <template>
     <template v-slot:name>
         <p>太郎</p>
     <template>
   </ChildComponent>
 </div>
</template>

##結果

タイトル
太郎
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?