0
0

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 1 year has passed since last update.

vanilla-autokanaをNuxt.jsとTypeScriptで使用

Last updated at Posted at 2022-04-21

VueNuxtTSの環境でふりがなをカタカナで自動入力したかったので、Nuxt.jsに対応している自動カナ入力を探していましたが、出てこないということで、vanilla-autokanaをインストールしてきて使って見ようと試みましたが、師匠の手を借りなんとか、使える形になりました。きっと断念された方も多いはず。。。
スクリーンショット 2022-04-21 16.03.59.png
まずはこのwindowにアクセスしているがSSR時にアクセスできていない問題です。

<script lang="ts">

import * as AutoKana from 'vanilla-autokana'

let autokanaName: any

mounted() {
  if (process.client) {
      autokanaName = require('vanilla-autokana')
     }
}
mounted() {
  if (process.client) {
      autokanaName = require('vanilla-autokana')
      }
  autokanaName = AutoKana.bind('#name', '#kana', { katakana: true })
}

としただけでは、このwindowエラーは回避できませんでした。

import * as AutoKana from 'vanilla-autokana'

を取って、requireに直接バインドさせます。

<script lang="ts">

mounted() {
  if (process.client) {
        autokanaName = require('vanilla-autokana').bind('#name', '#kana', { katakana: true, })
      }
}

こうすることで、windowのエラーは回避できました。
スクリーンショット 2022-04-21 16.54.12.png
次に来るのがこちらの問題、これはもうさっぱりわかりませんでした。#(シャープ)で指定したIDの要素を紐づけている訳ですが、.(ドット)でクラスの要素にしてもビクともしません。
スクリーンショット 2022-04-21 17.11.03.png
Vueのドキュメントにmounted$nextTickを使ってビュー全体をレンダリングするまで待つとあったのでそれを使います。

<template>

     <input
            id="name"
            v-model="form.name"
            class=""
            type="text"
            placeholder=""
            @input="handleNameInput"
          />
     <input
            id="kana"
            v-model="form.kana"
            placeholder=""
            type="text"
            class=""
          />

</template>

<script lang="ts">

interface Form {
  name: string
  kana: string
}

export default class Hoge extends Vue {

form: Partial<Form> = {}

async mounted() {
    
      if (process.client) {
        this.$nextTick(() => {
          autokanaName = require('vanilla-autokana').bind('name', 'kana', {
            katakana: true,
          })
        })
      }
    })
  }

handleNameInput() {
    this.form.kana = autokanaName.getFurigana()
  }

</script>

$nextTickを付与し#を外します。
スクリーンショット 2022-04-21 17.46.37.png

vanilla-autokanaを発動させることができました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?