javascript - 为什么多个指令不能在同一个元素上请求一个独立的作用域?

标签 javascript angularjs angularjs-scope

如果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/

相关文章:

javascript - 为什么 for(;;){...} 是一个无限循环?

mysql - 带有mysql的NodeJS rest api无法迭代输出格式

javascript - 使用 ng-init 初始化模型时,默认选择在 ngoptions 中不起作用

javascript - 如何检查三元条件下的动态模型名称?

javascript - 使 Angular ng-if 保留空间以显示事件是否发生

javascript - Angular指令不获取父级设置的值

jquery - 如何使用 AngularJS 中的 ng click 获取 <div> 元素的文本值并将其显示在另一个 div 中

javascript - 将选择值更改为动态添加选项会导致值 = ""

javascript - 删除一项后组件列表不更新状态

javascript - 当 Express.js 服务器获取时,从 MongoDB 检索的值是未定义的