0

我正在开发一个大型企业应用程序,我们的应用程序使用 jQuery,我们想专注于使用 angular,我们无法立即删除所有 jQuery 代码,因此我们必须处理系统中已经存在的东西。阻止我们使用 Angular 的最常见的事情之一是存在以下代码

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

我们现在不能删除它,因为它会破坏系统中的某些东西。相反,我们希望逐步平滑地移动到角度。我们需要做的第一步是在返回的 html 中应用 angular 的绑定并用 jQuery 替换。换句话说,我们需要将以下标记放入html变量中

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

而我们需要它被angular执行,可惜angular看不到新注入的html,怎么可能让angular看到呢?

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 回答