Javascript 如何在部分更新后在ng应用程序范围外编译html

Javascript 如何在部分更新后在ng应用程序范围外编译html,javascript,asp.net,angularjs,Javascript,Asp.net,Angularjs,我有一个用户控件,它使用anguar.js并在其内部某处声明一个div。 系统的另一部分不使用angular.js,甚至不引用它 现在的问题是,在部分更新html(例如使用update panel)之后,我需要重新编译它(因为它被注入DOM),而我在技术上无法做到这一点,因为整个html以及ng app声明都被替换了 而且我没有访问$compile服务的权限(好的,我可以使用$injector获得它,但是从哪里获得$scope?) 我可以将初始页面加载时的作用域存储在某个全局变量中。 但是使用相

我有一个用户控件,它使用
anguar.js
并在其内部某处声明一个
div
。 系统的另一部分不使用
angular.js
,甚至不引用它

现在的问题是,在部分更新html(例如使用update panel)之后,我需要重新编译它(因为它被注入DOM),而我在技术上无法做到这一点,因为整个html以及
ng app
声明都被替换了

而且我没有访问
$compile
服务的权限(好的,我可以使用
$injector
获得它,但是从哪里获得
$scope
?)

我可以将初始页面加载时的作用域存储在某个全局变量中。 但是使用相同的作用域重新编译会导致
$$watchers
集合的增量增加以及其他不必要的副作用


我想应该有一种方法可以强制angular执行它在初始页面加载期间执行的所有相同javascript,即创建模块、遍历html、实例化控制器等?

Injector为您提供$rootScope服务。尝试使用它来编译元素:

var injector = angular.injector(['ng']);
injector.invoke(function($compile, $rootScope) {
    $compile(containerElement)($rootScope);
});

injector还为您提供$rootScope服务。试试这个注入器.invoke(函数($compile,$rootScope){$compile(containerElement)($rootScope);});但我想$rootScope不是我真正需要的吗?因为我需要控制器的子范围你说你要替换整个ng应用程序?是的。我尝试使用
$compile(containerElement)($rootScope)
,并且没有错误,但是当我使用
containerElement.scope()
时,我得到了
未定义的
,并且生成的html不正确(例如,我有
你能发布你的html和其他相关的angularjs代码吗?我发现了一件更有趣的事情-为了在编译模板后应用绑定,你需要调用$rootScope.$apply();。如果你不这样做,那么绑定将在任何更改(例如用户输入)之前不会被解析)。检查此小提琴是否正确。手动编译后,应始终调用
$apply
,以解决当前数据绑定问题。
var injector = angular.injector(['ng']);
injector.invoke(function($compile, $rootScope) {
    $compile(containerElement)($rootScope);
});