目次
Nuxtにはvue-property-decoratorじゃなくてnuxt-property-decoratorってのがある
ちょっとブログをNuxt + contentfulでの構築を試しているときに最初は vue-property-decorator
を使ってましたがどこかの記事で nuxt-property-decorator
があることを知って最終的にはそっちを使ってます。
TypeScriptでクラスベースでVue(Nuxtも含む)を記述しようとすると vue-property-decorator
を基本的には使ったほうがよいと思います。
vue-class-component
を使っても良いですがどちらかというと vue-property-decorator
の情報の方が今は多い印象です。
この記事ではわかりやすく vue-class-component
と vue-property-decorator
の違いを整理してくれています。
TypeScriptでクラススタイルコンポーネントを実装する方法
構築した環境では実際のところ、とくに vue-property-decorator
でもエラーや不具合が出ませんでした。
Nuxtにはトップレベルのコンポーネント単位で head
タグ内での要素を記述したり上書きしたりする機能があるのですが、ネットで散見される記事ではその機能が vue-property-decorator
ではうまく動かないという情報もありましたので念のために nuxt-property-decorator
を使ったほうが良さそうです。
1 | head(){ |
vue-property-decoratorをnuxt-property-decoratorに入れ替える
vue-property-decorator
を削除しましょう。
1 | yarn remove vue-property-decorator |
npmの場合
1 | npm uninstall --save vue-property-decorator |
nuxt-property-decorator
を追加します。
1 | yarn add nuxt-property-decorator |
npmの場合
1 | npm install --save nuxt-property-decorator |
nuxt.config.jsを編集する
nuxt.config.jsに追記しましょう。
1 | build: { |
【サンプルソース】contentfulからblogのポストを取得する記述です。
Nuxtでは asyncData
というコンポーネントのデータをセットする前に非同期の処理が実行できる便利なメソッドがあります。
でこの asyncData
ですがどこに記述するのかというと @Component
デコレータに記述しておきます。
1 | <script lang="ts"> |
head
メソッドも @Component
デコレータに記述できるのですがcontentfulから取得したデータは head
の引数に this
が渡されてくるのでそれを利用します。
asyncData
内の以下の記述での post
は props
扱いになるため this
から参照できます。
1 | return { |
Nuxtはこれに代表されるような便利な機能がけっこうあります。