0

私は大規模なエンタープライズ アプリケーションに取り組んでいます。私たちのアプリケーションは jQuery を使用しており、angular の使用に集中したいと考えています。すべての jQuery コードをすぐに削除することはできないため、システムに既に存在するものに対処する必要があります。angular の使用を妨げている最も頻繁な原因の 1 つは、次のコードの存在です。

$.ajax('/HtmlController', {...}).then(function(html) {
    $('someElement').replaceWith(html);
});

システム内の何かが壊れてしまうため、今のところ削除することはできません。代わりに、一歩一歩スムーズに angular に移行したいと考えています。そして、最初に行う必要があるステップの 1 つは、返された html 内に angular のバインディングを適用し、jQuery に置き換えることです。つまり、次のマークアップをhtml変数に入れる必要があります

...
1 + 2 = {{ 1 + 2 }}
...

そして、Angular で実行する必要がありますが、残念ながら、Angular は新しく挿入された html を認識しません。

4

1 に答える 1

0

要素をコンパイルしてスコープにリンクする必要があります。角度のあるページがあると仮定すると、次のようなものが機能します。

$.ajax('/HtmlController', {...}).then(function(html) {
  var dom = $('someElement');
  var el = angular.element(dom), scope = el.scope(), 
      $compile = el.injector().get('$compile');

  scope.$apply(function(){
    dom.replaceWith($compile($(html))(scope));  
  });
});

簡単な例を次に示します: http://plnkr.co/edit/mRhsZV5DahfCjMWkP2My?p=preview

于 2013-05-27T22:03:45.010 に答える