2016-09-07 27 views
0

一部のデータが更新されたときにDOMに要素を追加/削除するjavascriptライブラリを使用しています。
新しい要素をDOMに追加するには、要素を返すテンプレート関数を呼び出します。私の場合、テンプレート関数は角度指示の中で定義され、追加された要素の中でUI Bootstrap Popover指示文を使う必要があるので、return $compile(html)(scope)[0];のようなものを返します。
Popoverについては、popover-append-to-body="true"を使用する必要があります。Angular UI Bootstrap - トリガー要素がDOMから削除されたときにポップオーバーを削除できない

私の問題は、トリガー要素がDOMから削除された場合、ポップオーバーは決して削除されないということです。削除を「削除」をクリックし、ボタンがポップオーバーを開く「をクリックします」をクリックhttp://plnkr.co/edit/AFsXBcaLBAs0F2garbAu?p=preview
:だから私たちは新しいトリガー要素を追加した場合、第二ポップオーバーは、本体に追加される、など。ここ

は簡略化した例であります「クリック」ボタンをクリックして「追加」をクリックすると、「クリック」ボタンが再度追加され、もう一度「クリック」をクリックすると、2回目のポップオーバーがDOMに追加されます。

トリガ要素がDOMから削除されたときにPopoverディレクティブを削除するにはどうすればよいですか?
私はそれを隠すだけでなく、DOMから削除する必要があります(popover-is-openで隠すことができますが、これをtrueに戻すと、まだポップオーバーが存在することがわかります)。
削除される要素のPopoverディレクティブでdestroyを呼び出す方法はありますか?

+0

コントローラでDOM操作をしない、あなたはこの@svarogあなたのコード – svarog

+0

を再設計することもポップオーバーの問題を表示するだけの簡単な例でした。私の実際のコードでは、私はコントローラでDOM操作をしていませんが、角度のあるライブラリを使用しています。問題は、 "ボタン"が作成され、このライブラリによってDOMに追加されるため、配列内に状態を保持できないことです。私の例でvanilla jsと書いたのは、私の実際のアプリケーションでは角度をつけて制御できないものです。 –

+0

あなたはまったく異なる問題を抱えています。コードを生成するボタンをディレクティブ内のリンク関数にインポートし、その上に '$ watch'を保持し、変更を' $ apply'する必要があります – svarog

答えて

0

コントローラでは、JSとHTMLの両方でDOM操作を行うべきではないので、ディレクティブのためのものです。あなたの場合は、組み込みディレクティブがいくつかありました。あなたがドン」

  • あなたのコントローラ内のすべてのあなたのJSコードを配置する必要があり、あなたのボタンとポップオーバー状態
  • を表現するために、配列を保持し、あなたのコントローラ内の関数へのクリックイベントをバインドするためにng-clickを使用している必要があります

    1. 使用しているときonclickを使用ng-click
    2. 角度APIは、バニラJSとjqueryとはまったく異なっていますので、混在させないでください。Angularが提供するものを使用してください。

    Here is your "revamped" code

  • 関連する問題