vue-router
を使う機会があったのですが、Options APIとComposition APIで使い方が異なり、よく分からなかったので備忘録としてまとめます。
目次
問題
Options APIで書かれたファイルをComposition APIに書き換える作業があったんですが、vue-router
が使われている部分をどう書き換えて良いかわかりませんでした、、、。
※この記事ではOptions APIによる以下の2つの記述例をComposition APIに書き換える想定で話を進めます。
// ① this を使って $route を取得している
alert(`The Id of this post is: ${ this.$route.params.id }`)
// ② this を使って $router を取得している
this.$router.push({
name: 'postDetail',
params: {
id: 'id1'
}
)
解決方法
結論として以下のように書けばOKです。
<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router'
// route オブジェクトを取得
const route = useRoute()
// router オブジェクトを取得
const router = useRouter()
// vue-router と無関係の処理は省略
// ① this を使わず route オブジェクトへアクセス
alert(`The Id of this post is: ${ route.params.id }`)
// ② this を使わず router オブジェクトへアクセス
router.push({
name: 'postDetail',
params: {
id: 'id1'
}
})
</script>
Composition APIではthis
にアクセスできないため、vue-router
からuseRoute
関数とuseRouter
関数をインポートし、route
オブジェクトとrouter
オブジェクトを取得する必要があります。
これで無事にvue-router
を使った記述をOptions APIからComposition APIへ書き換えることができました!
おわりに
Options APIからComposition APIの書き換えについては、こちらの記事も参考までにどうぞ↓
https://kazuya-engineer.com/2023/12/20/rewrite-from-options-api-to-composition-api-in-vue
コメント