Javascript ng控制器在DOM就绪后加载,而不是由Angular拾取

Javascript ng控制器在DOM就绪后加载,而不是由Angular拾取,javascript,angularjs,ajax,Javascript,Angularjs,Ajax,我们有一个混合了一些角度和一些普通javascript的应用程序。我们正试图一点一点地把它转换成角度 我们现在面临的问题是,在应用程序的一部分中,一个HTML模板通过ajax调用被注入DOM。此HTMl包含 ng-controller="MyController" 但是angular没有连接这个控制器,因为我们在控制器上放了一个console.log,它从来没有出现过。那么,如果非angular代码将该控制器注入DOM,我们如何告诉angular查找该控制器呢 您需要使用$compile来允许

我们有一个混合了一些角度和一些普通javascript的应用程序。我们正试图一点一点地把它转换成角度

我们现在面临的问题是,在应用程序的一部分中,一个HTML模板通过ajax调用被注入DOM。此HTMl包含

ng-controller="MyController"

但是angular没有连接这个控制器,因为我们在控制器上放了一个console.log,它从来没有出现过。那么,如果非angular代码将该控制器注入DOM,我们如何告诉angular查找该控制器呢

您需要使用
$compile
来允许使用此HTML模板。将允许您在每次AJAX返回字符串更改时编译此模板

HTML

<html ng-app="app">
  <body>
    <h1>AJAX-provided HTML into Angular-rendered template</h1>
    <div ng-controller="MyController">
      <div dynamic="html"></div>
    </div>
  </body>
</html>
要强制jQuery更新Angular代码,可以尝试调用该DOM元素的Angular对象(然后访问该对象的控制器):

jQuery

$.ajax(href, {
  success: function(data){
    var element = angular.element($('#myElement'));
    var scope = element.scope();
    scope.$apply(function(){
       scope.updateHtml(data);
     });
  }
});

它是如何注射的?我认为您必须首先
$compile
它,以便angular知道问题在于HTML是通过非angular代码注入DOM的。普通jqueryajax。因此,这个HTML只有一个带有ng controller=“MyController”的div,在将其添加到DOMOK之前只需$compile HTML,但是我应该将$compile代码放在哪里呢?请记住,使用纯javascript的jquery加载html,因此您可以提供一个示例,说明在何处或如何执行此操作吗?我的ajax是外部的。我正试图在底部的链接中做类似的事情,但它不起作用。。。我更新了从外部角度执行角度范围函数。通过使用
element.controller()
创建ng控制器对象,也可以以相同的方式执行控制器功能。
$.ajax(href, {
  success: function(data){
    var element = angular.element($('#myElement'));
    var scope = element.scope();
    scope.$apply(function(){
       scope.updateHtml(data);
     });
  }
});