グッドプラクティス

はじめに

ウェブコンポーネントにおけるグッドプラクティスをまとめてみました。要点は次の通り

  1. カスタムタグ・シャドウDOM・templateタグの3つを使う。HTMLインポートは使用しない
  2. カスタムタグの定義はHTMLファイルに記述する

HTMLインポートは全ブラウザに実装されそうもないので、使用しないことにした。(ポリフィルも使わない)
JavaScriptにHTMLやCSSを書くのは好きになれなかったので、HTMLファイルに書くことにしました

定義ファイルの作成例

定義ファイルの作成例

ポイントは次の通りです

カスタムタグの登録について

カスタムタグの登録においては、tag.define()の第2引数にクラスを指定することもできます。
第2引数を省略した時は、初期値として次のようなクラスが登録されます

クラス登録例

このscriptタグに書くコードには制限があります

現在のドキュメントは定義ファイルの呼び出し元になるので、現在のドキュメントに依存するコードが記述できません。パスも同様です

現在のドキュメントを参照できない代わりとして、tag.template('タグ名')という関数で最初のtemplate要素を取得できます。

tag.template()

URLの設定

定義ファイル(コンポーネント)を作成したら、今度はそれを読み込みます

読み込み側ではtag.jsを読み込んで、URLの設定を行う必要があります。
このURLに基づき定義ファイルがダウンロードされます

URLの設定

個別のURLが見つからなかった時にデフォルトURLが使用されます

tag.import()で読み込む

定義ファイルを読み込む方法は2パターンあり、まずはtag.import()の紹介から

tag.import()

定義ファイルの取得は非同期なのでいつ読み込まれるかは不定です。
読み込みが完了してから何かをしたい場合は customElements.whenDefined() を利用してください

tag.replace()で読み込む

定義ファイルを読み込むもう1つの方法はtag.replace()、既存のタグをカスタムタグに置換します

tag.replace()
置換例

置換の際に、カスタムタグのreplaceプロパティに置換元の要素が渡されます。次のように取得できます

置換元の要素を取得