如果Angularjs - Multiple directives on element with one being isolate scope是的,隔离范围绑定(bind)到指令,那么为什么会发生冲突?此错误的文档指出,处理它们会导致冲突或不支持的配置
。我不买这个。多个指令已经共享元素的范围,这肯定是冲突/不受支持的配置会出现的地方。我尝试寻找这方面的“原因”,但空手而归。
有人可以解释/举例说明这确实会造成冲突或不支持的配置吗?
最佳答案
为什么同一元素上的多个指令不能获得单独的隔离作用域
答案很简单——只需要一个作用域来将子元素绑定(bind)到 (see source),因为在后代元素中对作用域属性进行的赋值需要有一个明确的目标。剩下的就是措辞问题。
虽然在某种程度上,引用“为特定指令”创建的隔离范围是合适的(如 linked answer 所做的那样),但仅在某种意义上,请求隔离的指令是该元素上的指令中只有一个可以访问隔离范围。因此,创建范围是为了将指令和子元素与该 DOM“级别”的其余部分隔离开来。
为什么多个指令不能获得相同的隔离作用域
为多个指令提供相同的隔离范围会冒范围绑定(bind)配置冲突的风险(多个指令可能会尝试绑定(bind)到隔离范围上的相同属性)。
为什么低优先级的指令不能使用隔离作用域
一个简单而引人注目的论点是,元素上的 {{interpolated.expressions}}
需要针对与 plain expressions
相同的范围进行评估(提供给指令支持他们),否则整个事情将一团糟。 ({{expressions}}
的插值是单独完成的,因此可以配置接受一个属性中的 plain expression
和另一个属性中的 String
的指令表达式针对不同的范围进行评估。)
如果他们真的需要,他们可以访问隔离范围(但这需要启用 Debug Data)。如果它们的优先级低于创建隔离作用域的指令,则它们可以仅在其链接函数 ( see demo) 中使用 element.isolateScope()
。
关于javascript - 为什么多个指令不能在同一个元素上请求一个独立的作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485848/