2017-11-24 10 views
0

既存のHTMLドキュメントを取り出して表示するAngularアプリケーションを作成しています。ハンドラーを既存のHTMLにフックアップする方法

サービスを使用して、既存の大量のドキュメントを(第三者から)取り出し、パネルに表示します(innerHtmlバインディングを使用)。

<div class='legal-doc-panel' [innerHtml]='doc'></div> 

期待どおりに動作します。

私が作成しているアプリケーションは、既存のドキュメントに追加情報を追加します。

ユーザーが「読み込まれた」HTMLのさまざまな要素をマウスオーバーまたはクリックして別のパネルに追加のコンテンツを表示すると検出したいと考えています。

私は、ページに(innerHtmlを介して)持ってきて、それらに応答するいくつかの要素のためにマウスハンドラーをフックしたいと思います。

これを行うにはどのような方法がお勧めですか? 何か提案がありがとうございます。

答えて

0

Angularは、あなたがinnerHtmlに入れているものを意識していません。

<div class='legal-doc-panel' [innerHtml]='doc' (myEvent)="onMyEvent()"></div> 

そして、あなたが持つEventEmitterとコンポーネントに行うだろうようにあなたがイベントを発行することができ、あなたの内側のHTML内:しかし、あなたは角度が知っているホスト要素でイベントを聞くことができます。このようなものがあります:

var event = new CustomEvent("myEvent", { 
    someData: 'foo' 
}); 

hostElement.dispatchEvent(event); 

とにかく私は、最もクリーンな解決策は、innerHtmlをまったく使用しないことをお勧めします。代わりにあなたのサーバーはあなたにJSONを与え、あなたはAngularを使ってHTMLを構築します。

あなたがあなたのinnerHtmlを挿入した後、あなたのcomponent.tsの中にバニラJavaScriptを使うことができます。 div内の要素を検索し、通常のJavaScriptと同様にaddEventListener()を使用します。

+0

ご提案ありがとうございます@Mick。あなたの提案が私がしようとしていることを達成するのに役立つとは思わない。カスタムイベントを起動する必要はありません。私は制御しないhtmlの部分(特定のHTML要素をページにインポートしたもの)から特定のhtml要素を介してブラウザイベント(クリックイベント)を検出するだけで済みます。また、私はinnerHtmlに表示されるコンテンツを制御しません。法的文書のスニペットをHTMLとして提供するサードパーティのサーバで、自分のサーバからの情報(JSONデータを返す)を補うものです。 – raduw

+0

ホスト上のイベントだけを聴くことができます。あなたのinnerHtmlのイベントにフックし、あなたが上記のようなコンポーネントと同様にそれらをホストに放出するために、Angularの外にチャンスだけがあります。 – Mick

+0

コンテンツを知っているなら、もちろんネイティブJavaScriptを使うことができます。 innerHtmlを配置すると、要素を検索し、コンポーネント内からイベントを聴くことができます。すべてのonChangeに対してaddEventListener()を使用しないように注意してください。私はこれを追加するために私の答えを編集しました。 – Mick

関連する問題