投稿

ラベル(nuxt)が付いた投稿を表示しています

nuxt-linkクリックイベントでの$refs

 以下の記事はアメブロで2020-03-25に投稿したものです。 nuxt-linkクリックイベントを拾って処理メソッド内から、 $refsを使って子コンポーネントを参照しようとしてももう子コンポーネントはdestoryされてしまっているようだ。 どうしても$refsを使いたい場合は、nuxt-linkにevent=""としてnuxt-link自体のクリックは無効にして 自前のクリックイベントメソッドから$router.pushなどで自力で遷移するようにすれば$refsが使える。

nuxt3(javascript、typescript)での文字コード変換

 以下の記事はアメブロで2024-07-13に投稿したものです。 いわゆるシフトJISだといくつかあるようだが、 MS932をサポートしているものはiconv-liteしか見つけられなかった。 厳密にはシフトJISとMS932は違うようなので、これを採用した。 まぁ、昨今のweb開発でUTF-8以外で開発とかかなり稀だが、 csvダウンロード/アップロードだとほぼシフトJIS系になる。 ここで文字コード変換が必要になるのだが、 使わせてもらって言うのもなんだが、 ドキュメントがクソだ。 UTF-8からMS932へ変換したいだけなのに、 公式ドキュメントのBasic APIを見るとdecode、encodeが出てくる。 どっち使うんだ??? とふつうは思うのだが、 この公式ドキュメントには全く記述がない。 結局、encodeを使うのが正解で、 const str932 = iconv.encode('あいうえお', 'MS932'); となる。 str932には変換後の [0x82, 0xa0, 0x82, 0xa2, 0x82, 0xa4, 0x82, 0xa6, 0x82, 0xa8] が入っているのだが typescriptだとBuffer型になるため、こいつがnuxt3には入ってない。 (標準ビルドでviteを使っているため?node特有のrequireなどもビルド結果に含めてもらえない) まぁ、BlobがBufferをそのまま受け入れてくれるので new Blob([str932], {'type' : 'text/plain' });して このあとはURL.createObjectURLしてAリンク作成してそのリンクのクリックを呼ぶと ブラウザがBlobの内容をダウンロードしてcsvファイルにくれる。 ここまでたどり着くのに1時間以上要した。 npmでBufferだけ入れてみたり、あっちこっちサンプルを探しまくった。 いろいろやって判明したのは iconvというコマンドツールが元々あった? このiconvがデフォルトでUTF-8になっている。 なのでiconv-liteも UTF-8<===>シフトJIS、JIS、EUC これが基本。 なのでUTF-8を介さない以下のようなことはで...