DOM 操作を行う従来の JavaScript と組み合わせた AngularJS アプリがあります。厄介な部分 - レガシー JavaScript がAngularJS ディレクティブを使用して dom 要素を挿入することがあります。当然、AngularJS はこれを認識しておらず、これらのディレクティブはコンパイルされず、スコープにリンクされていません。動的に挿入される新しい要素のディレクティブをコンパイルしてリンクする方法は?
すべてをangularで書き直すとか、レガシーなものをangularでラップするように言わないでください。私はそれに触れられません。私の angularjs アプリは、追加機能を提供するためにサードパーティの Web サイトで実行されるプラグインです。
私が検討したオプション:
- angularアプリを破棄して、毎回再度ブートストラップするだけです-アプリを破棄するクリーンな方法がないため、これをきれいに行うのは実際には非常に困難です: Angularjsアプリを破棄する方法は?
- DOM をトラバースして、コンパイルされていないディレクティブを探します。(属性として) 検索するディレクティブはほんの一握りしかありません。Angular は、スコープがアタッチされている要素に ng-scope クラスを自動的に配置するため、これがない場合は、$compile サービスを使用してディレクティブを手動でコンパイルし、それをスコープにリンクできます。
現在、私は 2 番目の方法に取り組んでいますが、もっとスマートな方法があるに違いないと考え続けています。誰かがより良いアイデアを持っていますか?
私のアプリは dom 操作の後にコールバックを受け取ることに言及する必要がありますが、それが必要ない方が良いでしょう。