diadia

興味があることをやってみる。自分のメモを残しておきます。

propを使う

PROPを使う場面

propを使ってみたのでコードを残しておく。

propは親コンポーネントから子コンポーネントにデータを渡したい時に使われる。  親コンポーネント内にコンポーネントを記述している場合書かれているコンポーネントを子コンポーネントという。

# 親コンポーネント
<template>
<div>
<p>これは親コンポーネント</p>
<SComponent/> # これが子コンポーネント
</div>
</template>

propは、この.vueファイル内でSComponentにデータを渡すことを前提とする。

propを使う際のイメージ

コンポーネントでは子コンポーネントタグ内で変数を渡す。 子コンポーネントでは.ts内ではデータを受け取る変数名をプロパティとしてセットする。

サンプル

## 親コンポーネント

<template>
  <div class="home">
    <MyComponent />
  </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import MyComponent from '@/components/MyComponent.vue'
@Component({
  components: {
    MyComponent,
  },
})
export default class Home extends Vue {
      private propForMyComponent = '親から渡されるプロパティ';
}
</script>
## 子コンポーネント MyComponent.vue
<template>
    <div>
        <p>これは子コンポーネントです。</p>
    </div>
</template>


<script lang='ts'>
import MyComponent from '@/components/MyComponent';
export default MyComponent
</script>
// MyComponent.ts

import { Component, Prop, Vue } from 'vue-property-decorator';

@Component({})
export default class MyComponent extends Vue{}

コンポーネントではデータを子コンポーネントタグ内で渡す

## 親コンポーネント

<template>
  <div class="home">
    <MyComponent  :myProp='propForMyComponent'/>
  </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import MyComponent from '@/components/MyComponent.vue'
@Component({
  components: {
    MyComponent,
  },
})
export default class Home extends Vue {
      private propForMyComponent = '親から渡されるプロパティ';
}
</script>

コンポーネントでは受け取る変数の名前をプロパティとしてセットする

## 子コンポーネント MyComponent.vue
<template>
    <div>
        <p>これは子コンポーネントです。</p>
    </div>
</template>


<script lang='ts'>
import MyComponent from '@/components/MyComponent';
export default MyComponent
</script>
// MyComponent.ts

import { Component, Prop, Vue } from 'vue-property-decorator';

@Component({})
export default class MyComponent extends Vue{
    @Prop()
    private myProp: string;

    public mounted() {
        console.warn(this.myProp);
    }
}