以某种方式可以检查角度范围是否被隔离,仅具有范围?
我知道,孤立且不孤立的范围有不同的原型。然而,这些原型是有角度的私人,不容易访问。检查原型名称似乎很脏。
有更好的主意吗?
答案 0 :(得分:2)
我知道的第一个区别是,隔离范围有“$ root”字段,即rootScope 。
第二个区别是,隔离范围具有“$$ isolateBindings”字段,但未隔离没有
答案 1 :(得分:1)
根据文档,以下内容应该可以解决问题:
$element.isolateScope()
如果一个直接连接到当前,则检索隔离范围 元件。此getter应仅用于包含a的元素 启动新隔离范围的指令。在此调用scope() element始终返回原始的非隔离范围。需要调试 要启用的数据。
https://docs.angularjs.org/api/ng/function/angular.element#jquery-jqlite-extras
如文档中所述,如果您配置以下内容(正如您应该在生产中那样):
$compileProvider.debugInfoEnabled(false);
这个方法将不再起作用......我认为以这种方式获得isolateScope
的主要原因是单元测试,并且没有理由在范围隔离上有条件地执行某些操作(如果我错了,请纠正我。
答案 2 :(得分:0)
您可以这样检查:
if (scope.hasOwnProperty('$root') && scope.$root !== scope && scope.$root) {
// the scope is isolate
}
它并不完美,因为它依赖于实现细节,但我想不出比这更好的东西。
说明:
scope.hasOwnProperty('$root')
。每个范围都有此属性。它指向最近的孤立或$rootScope
的祖先范围。此属性是原型继承的,因此它仅用于隔离范围和$rootScope
拥有。
scope.$root !== scope
。检查范围不是$rootScope
。
scope.$root
。可以用!scope.$$destroyed
替换。当范围被销毁时,null
被分配给其许多属性,包括$root
,因此该属性变为拥有。