3
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 3 years have passed since last update.

Nuxt.jsとMaterial Iconで、SPA時に文字化けする

Posted at

事象は表題の通り

Material Iconの実装は以下の方法です。

【IE対応】Google Material Iconsをdata 属性を使ってスマートに表示する

上記の手法、Nuxt.jsでSSRされたときは問題なく表示されますがSPA遷移行うとユニコードがそのまま文字列として展開されてしまいます。

SSR
スクリーンショット 2020-08-24 12.25.12.png

SPA
スクリーンショット 2020-08-24 12.25.04.png

回避方法

これを回避する方法は2パターン考えられます。

v-htmlを使う

どうやら仮想DOMから実際にHTMLを出力される際にユニコードを文字列としてエンコードして出しているように見えます。
v-htmlディレクティブを利用することでこれを回避できます。

<a href="~~~" v-html="icon"></a>

...
<script>
  ...
  const icon = `<i class="material-icon" data-icon="&#57534;"</i>お問い合わせ`
  return { icon }
  ...
</script>

ユニコードをそのまま貼り付ける

出力されるHTMLに注目してみましょう。

SSR
スクリーンショット 2020-08-24 12.31.34.png

SPA
スクリーンショット 2020-08-24 12.32.19.png

正常に表示できているときはHTMLに通称豆腐として展開されています。
なので、vueテンプレート側でもこの豆腐で登録することでうまく表示できるのでは?ということで試してみたところ、うまく表示されました。

スクリーンショット 2020-08-24 12.35.46.png

使っているアイコンをオブジェクトで管理することで「この豆腐なんだっけ?」も防げますね。とはいえスマートな解決とは言えないのでもっと良い解決方法が知りたいです。

3
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
3
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?