2017-09-07 6 views
0

私は、バニラWebコンポーネントのさまざまな部分がどのように連携しているかを理解しようとしています。私は単純なカスタムコンポーネントを定義し、テンプレートを含めることを試みています。私はこれをやっているのは、多くのブラウザベンダーがHTMLのインポートをサポートしておらず、代わりにes6モジュールを使用しているからです。カスタムコンポーネント - js文字列リテラルとして定義されたhtmlテンプレートをクローンする方法?

​​

私が手にエラーがキャッチされないタイプエラーです:cloneNodeを、私はそれは私が文字列として私のテンプレートを定義しています方法とは何かを持っている想像機能 ではありませんここに私のWebコンポーネントです。

私の質問は次のとおりです。テンプレートがJavaScript文字列リテラルとして定義されているカスタムコンポーネントでテンプレートをスタンプするにはどうすればよいですか?追加の依存関係やnpmライブラリを使わなくてもそれを行うことはできますか?

答えて

1

https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNodecloneNodeは、Nodeインターフェイス上にある方法です。

tmplは、Nodeではなく、stringです。あなたはあなたのコードの先頭にこのような何かをする必要があり

let tmpl = document.createElement('template'); 
tmpl.innerHTML = ` 
<h1>header</h1> 
<p>copy</p> 
`; 
+0

ありがとう@sideshowbarker、編集okです - (1) 'template'はinnerHTMLプロパティではありませんでしたか..? (2)文字列リテラルになるように文字列を更新するつもりでしたが、あなたは私にそれを打ち負かしました – itodd

+0

innerHTMLの内容を知りたいと思っていましたが、OPは望んでいないと思いました。 sideshowbarker

+0

とにかくもっと一般的なやり方は、 'MyComponent'コンストラクタで' attachShadow'を使うことです: 'const shadowRoot = this.attachShadow({mode:' open '}); shadowRinner.innerHTML = \ '

ヘッダー

コピー

\ '' (Stack Overflowはコメントの中でそれを食べるので、そのマークアップで改行を想像する必要があります) – sideshowbarker

関連する問題