See the Pen ポップアップを開くComponent on CodePen.
VueJSにはcomponentという非常に便利な機能があり、これを使うと機能を部品として切り出し再利用が可能になる上、ファイルを分けられるので可読性も上がる。componentを使う際は.vueファイルに定義したcomponentをexportし、使う側でimportするのが一般的であり、VueJSの書き方を調べるとこの書き方は非常によく目にする。しかしだ、GASの標準エディタはJavaScriptを記述する.gsファイルと.htmlファイル、それと例外的に.jsonファイルを作成することがしかできない。.vueファイルは作成できず、どんなに便利なcomponentを発見しても同じ書き方で実現することはできないのだ。ここではGASの標準エディタでcomponentの利用を可能にするまでの軌跡を、その奮闘の過程を、ドキュメンタリーに見ていただこう。いや嘘だ。長くなるので結果だけお伝えしたい。
以前作ったポップアップをcomponentを使った書き方に変更する。"templateタグでcomponent化したいHTMLを構築し、defineComponentでidを指定してcomponentを定義する。定義したcomponentはpopup変数に格納する。以前の記事は以下を参照。 neko-gas.hatenablog.com
通常はimportしたcomponentを登録するが、importができないので代わりに変数に格納したcomponentを登録する。呼び出し側はたったこれだけで済んでしまう。
componentを使ってお手軽に呼び出せるようになったが、今のままでは「はい」を押しても「いいえ」を押しても閉じるだけの無意味なポップアップを表示するだけの使い道のないcomponentになってしまう。slotを使ってポップアップの中身は呼び出し元で自由に定義できるようにしよう。
猫
componentを記述したファイルは.vueファイルのように、cssも含めて一つのhtmlファイルにまとめることができる。ただしimport文での変数名変更ができないため、変数名の同じcomponentは利用できない点、後から読んで変数がどこから来ているか分かりづらい点、呼び出し元のhtml内でスクリプトレットを用いたhtmlの呼び出しが必要になる点などを注意してほしい。