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);
});