Dynamic 在页面内动态加载AngularJS模板

Dynamic 在页面内动态加载AngularJS模板,dynamic,dom-manipulation,angularjs,Dynamic,Dom Manipulation,Angularjs,我有一个包含两个控制器的页面:一个是管理所谓的“应用程序”列表,另一个是将新的Angular模板放入其Div元素的innerHTML中 <div ng-controller="appList"></div> <div ng-controller="appPane"> Dynamic content should be loaded here! </div> 应该在这里加载动态内容! 我尝试过使用标准的{{expression}}绑定,但它们不

我有一个包含两个控制器的页面:一个是管理所谓的“应用程序”列表,另一个是将新的Angular模板放入其Div元素的innerHTML中

<div ng-controller="appList"></div>
<div ng-controller="appPane"> Dynamic content should be loaded here! </div>

应该在这里加载动态内容!
我尝试过使用标准的{{expression}}绑定,但它们不适用于html,我也尝试过ng bind html unsafe指令(将innerhtml绑定到应用程序请求返回的指令),但在这段新代码中不执行控制器


问题似乎在于,通过使用绑定,Angular并没有重新解析相关html的内容,从而将其用作Angular应用程序。有没有关于如何让它解析动态内容的想法?

当$compile服务提供了您希望与当前作用域一起重新编译的元素时,它似乎实现了我想要的功能

我来源的示例:

var appPane = $('#AppPane');//JQuery request for the app pane element.
appPane.html(data);//The dynamically loaded data
$compile(appPane.contents())($scope);//Tells Angular to recompile the contents of the app pane.
我希望这能帮助任何遇到我问题的人。

查看angularjs中的ngView

下面是一个非常基本的示例:

查看模块(来自项目)。它增加了状态的概念,这与路由非常相似,但有其他好处,比如嵌套它们的能力。例如:

$stateProvider
    .state('myState', {
        url: '/mystate',
        templateUrl: '...',
        controller: 'MyCtrl'
    })
    .state('myState.substate', {
        url: '/{substate}',
        templateUrl: '...',
        controller: 'MySubCtrl'
    });

每当您转到
/mystate/something
时,
MySubCtrl
将被激活,您可以使用该“something”作为参数(请参阅)。您可以将状态嵌套到任意数量的级别。

是“应用程序”不同的角度应用程序(每个应用程序都有
ng-app
声明?)还是同一应用程序的不同控制器/视图?如果只是不同的控制器/视图,我会使用应用程序列表作为导航和设置
$routeProviders
()来管理不同的视图。可能是一个比我尝试的更好的解决方案,但我对Angular还是比较陌生,所以我会尝试一下。谢谢。这是“官方”的替代方案,但目前在需要控制器分层结构的情况下(如我原来的问题)不起作用。这听起来真的很有用!由于我的答案来自Angular的早期发展,这是不存在的——如果情况不是这样,其他人可以随意评论,但我觉得这是现在的正确答案。接受。我很高兴这些东西(AngularJS生态系统)正在以现在的方式发展。作为记录,我已经在我自己的项目中尝试过这个解决方案,它非常有用。有一些问题,比如导航到不存在的路线会导致错误,但我敢打赌,隐藏在他们中等深度的文档中是一种检测路线何时不存在的方法,这样它就可以被处理。作为一般情况下的场景,我向任何试图使用路由的人推荐此解决方案,并建议跳过Angular的官方路由提供程序,因为此解决方案功能强大得多。如果没有显式加载JQuery,您只需
var-appPane=document.getElementById
appPane.innerHTML=data)
$compile(containerElement)($scope)