仅在特定的DOM层次结构上启用angularjs?
我想从我的站点的顶层关闭角度插值,但为单个元素重新启用它 我正在尝试向一个相当大的遗留站点添加一些角度功能,但是在可能包含仅在特定的DOM层次结构上启用angularjs?,angularjs,Angularjs,我想从我的站点的顶层关闭角度插值,但为单个元素重新启用它 我正在尝试向一个相当大的遗留站点添加一些角度功能,但是在可能包含{{bindable}括号的任何地方添加ng non-bindable是不可行的。这一点尤其重要,因为站点可能在这些括号内有{{unparseable:er9>-14%(%randomanness}}}。(Angular为此抛出[$parse:syntax]错误,并停止解析我页面的任何剩余部分) 理想情况下,我会在每页上设置类似于的内容,然后在实际使用angular的少数地方
{{bindable}
括号的任何地方添加ng non-bindable
是不可行的。这一点尤其重要,因为站点可能在这些括号内有{{unparseable:er9>-14%(%randomanness}}}
。(Angular为此抛出[$parse:syntax]错误,并停止解析我页面的任何剩余部分)
理想情况下,我会在每页上设置类似于
的内容,然后在实际使用angular的少数地方设置
到目前为止,我还没有找到一种方法来做到这一点。我试图更改angular parser以忽略文本节点,直到它看到控制器为止,但这似乎有点过头了。我还尝试将ng app
仅添加到我希望应用程序生存的节点上,但随后我必须用应用程序手动引导每个节点,我认为这会导致我不得不e应用程序的多个副本同时运行,我希望的任何单例(例如缓存)都会被实例化多次(除非我错了?)
有没有办法将ng app
和ng non-bindable
放在顶层
,然后手动将我关心的div添加到app中
我用一个简单的例子设置了一个plunkr:一个可能的解决方案是以某种方式配置angular,它不寻找花括号,而是您自己用于插值的特殊语法
var myApp = angular.module('App', []);
myApp.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
myApp.controller("Ctrl", function($scope){
$scope.value="value";
});
<div>[[value]]</div>
var myApp=angular.module('App',[]);
myApp.config(函数($interpolateProvider){
$interpolateProvider.startSymbol(“[]”);
$interpolateProvider.endSymbol(']]');
});
myApp.controller(“Ctrl”,函数($scope){
$scope.value=“value”;
});
[[value]]
我没有测试它,它可能会有一些副作用,特别是对于第三方代码,但它可能是管理转换阶段的一种方法
“问候”的上述评论让我找到了一个有效的解决方案
我编写了一个终端指令,它编译并附加到中的$rootScope
每个[ng bindable]
元素(使用jquery):
app.directive('defaultNonBindable',['$compile','$rootScope',
函数($compile,$rootScope){
返回{
编译:函数(范围、elm、属性){
var bindables=$(“[ng bindable]”);
bindables.each(函数(){
var el=角度元素(此),
compiled=$compile(el);
已编译($rootScope);
});
},
终端:是的,
}
}
]);
然后,我将每个块包装在一个ng可绑定div中:
<div ng-bindable>
<div ng-controller="MyController">
{{this_works}}
</div>
</div>
{{这个工作}}
我用一个例子介绍了最初的plunkr:您是否研究过一个自定义指令,该指令在ngNonBindable中查找元素,比如通过CSS选择器,然后在这些元素上运行$compile?您可能能够使用angular.bootstrap和(DI注释)在多个位置注入相同的应用程序工厂方法返回一个单例。@MichalCharemza:我花了一段时间才弄明白怎么做,但它是有效的!我已经分叉了原始的plunkr并进行了修复:我考虑过,但在我的站点中[[就像{{,就像任何其他随机字符串一样。我需要确保只解析我关心的div。