为什么多个指令不能在同一个元素上要求隔离范围?

Dor*_*oro 14 javascript angularjs angularjs-scope

如果Angularjs - 具有一个隔离范围的元素上的多个指令是正确的,则隔离范围绑定到指令,那么为什么会有任何冲突呢?此错误的文档说明了这一点processing them would result in a collision or an unsupported configuration.我不买这个.多个指令已经共享元素的范围,这肯定会在碰撞/不支持的配置中出现.我已经尝试在此寻找"为什么",但是空手而归.

有人可以解释/举例确实会造成碰撞或不支持的配置吗?

hon*_*n2a 7

为什么同一元素上的多个指令不能获得单独的隔离范围

答案很简单 - 只需要一个范围来绑定子元素(参见source),因为在子元素中完成的范围属性的赋值需要有一个明确的目标.其余的是措辞问题.

虽然在某种程度上,引用为"特定指令"创建的隔离范围是合适的(如链接的答案那样),但只有在请求隔离的指令是唯一的一个才是这样.该元素的指令可以访问隔离范围.因此,创建范围是为了将指令和子元素与DOM的"级别"的其余部分隔离开来.

为什么多个指令不能获得相同的隔离范围

为多个指令提供相同的隔离范围可能会导致范围绑定配置发生冲突(多个指令可能会尝试绑定到隔离范围上的相同属性).

为什么优先级较低的指令不能使用隔离范围

一个简单而引人注目的论点是,{{interpolated.expressions}}元素需要在与plain expressions提供给支持它们的指令相同的范围内进行评估,否则整个事情就会变得一团糟.(例如,由于插值{{expressions}}是单独完成的,因此可以使用针对不同范围评估的表达式来配​​置接受plain expression一个属性和String另一个属性的指令.)

如果他们真的需要,他们可以访问隔离的范围(但这需要启用调试数据).如果它们的优先级低于创建隔离范围的指令,则它们只能element.isolateScope()在其链接功能中使用(参见演示).