【typescript】vue-property-decorator(vue-class-component)で$refsを扱う

こんにちは!
今回はvue.js(Nuxt.js)でtypescriptを利用している際の$refs
の扱い方です。
記載するコードはbootstrap-vueのカルーセルを制御する際に必要だった$refs
の扱い方サンプルです。
カルーセルのスライドを前後させるUIを、デフォルトのUIではなく独自で作ったので$refs
を利用してイベント発火させています。
お役に立てると嬉しいです!
目次
- サンプルコード
- 説明
- まとめ
サンプルコード
<template>
<b-carousel ref="targetCarousel" :interval="4000">
<b-carousel-slide>
// ...略
</b-carousel-slide>
</b-carousel>
</template>
import { BCarousel } from 'bootstrap-vue'
import { Vue, Component } from 'vue-property-decorator'
<script lang="ts">
@Component
export default class CarouselSample extends Vue {
$refs!: {
targetCarousel: BCarousel
}
prev(): void {
this.$refs.targetCarousel.prev()
}
next(): void {
this.$refs.targetCarousel.next()
}
}
</script>
説明
特に説明するまでもなさそうです。
以下でthis.$refs
を扱えるようにしているイメージです。
$refs!: {
targetCarousel: BCarousel
}
また、template側にもref
を設定しておきます。
<b-carousel ref="targetCarousel" :interval="4000">
カルーセルのスライドを前後させたい時の処理が以下です。
this.$refs.${target ref name}
でtemplateに登録したrefが取得できます。
prev(): void {
this.$refs.targetCarousel.prev()
}
next(): void {
this.$refs.targetCarousel.next()
}
まとめ
未だにtypescriptだと、どのように書けばいいかわからなくなってしまう時が多いです。
この記事が誰かのお役に立てると嬉しいです。