Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在特定的DOM层次结构上启用angularjs?_Angularjs - Fatal编程技术网

仅在特定的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。