使角度看到由jquery创建的内容

时间:2013-05-27 16:03:01

标签: angularjs

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

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

我们暂时无法将其删除,因为它会破坏系统中的某些内容。相反,我们希望一步一步顺利地转向角度。我们需要做的第一步是在返回的html中应用angular的绑定并用jQuery替换。换句话说,我们需要将以下标记放入html变量

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

我们需要它通过角度来执行,但不幸的是角度没有看到新注入的html,怎么可能让角度看到它?

1 个答案:

答案 0 :(得分: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