Javascript 为什么可以';多个指令是否要求在同一元素上有一个独立的作用域?

Javascript 为什么可以';多个指令是否要求在同一元素上有一个独立的作用域?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,如果是正确的,那么孤立的作用域将绑定到指令,那么为什么会有冲突呢?此错误的文档说明处理这些错误将导致冲突或不受支持的配置。我不相信这个。多个指令已经共享了元素的作用域,这肯定是冲突/不受支持的配置的原因。我试着寻找这个问题的“原因”,但结果却是空手而归 有人能解释/给出一个例子,说明这确实会造成冲突或不受支持的配置吗?这可能是因为作用域在元素级别(AFAIK)关联。因此,在给定的元素上,只有一个与之关联的作用域,它可以是父、子或隔离的作用域之一。AngularJS指南上的范围文档也引用了这一点(

如果是正确的,那么孤立的作用域将绑定到指令,那么为什么会有冲突呢?此错误的文档说明处理这些错误将导致冲突或不受支持的配置。我不相信这个。多个指令已经共享了元素的作用域,这肯定是冲突/不受支持的配置的原因。我试着寻找这个问题的“原因”,但结果却是空手而归


有人能解释/给出一个例子,说明这确实会造成冲突或不受支持的配置吗?

这可能是因为作用域在元素级别(AFAIK)关联。因此,在给定的元素上,只有一个与之关联的作用域,它可以是父、子或隔离的作用域之一。AngularJS指南上的范围文档也引用了这一点()

任何元素都不能有多个与之关联的作用域(根据设计),因为作用域表示应用程序结构以及任何给定元素的上下文

因此,当同一元素上的两个指令要求一个独立的作用域时,AngularJS认识到它必须创建两个不同的作用域来满足完全相同的元素,这是不受支持的行为。唯一的方法是以某种方式合并这两个作用域以允许其基本假设,如果这两个独立的作用域都要求绑定到同一个作用域变量,则可能会导致冲突,如

   scope: { myData: '=' }

现在,如果两个指令都要求这样做,或者将某些函数添加到范围中,那么您将进入未知区域,具体取决于首先执行哪个指令

一个原因可能是,在单元测试指令中很有用的函数返回与元素关联的隔离范围。允许多个隔离作用域将意味着该函数将更加复杂,可能需要向隔离作用域对返回某种指令名散列

这是否足以证明设计决策不允许多个隔离作用域,我必须承认我不确定…

为什么同一元素上的多个指令不能获得单独的隔离作用域 答案很简单-只需要一个作用域就可以将子元素绑定到(),因为在子元素中对作用域属性的赋值需要有一个明确的目标。剩下的是措辞问题

虽然在某种程度上,引用“为该特定指令”创建的隔离作用域是合适的(正如所做的),但只有在某种意义上,请求隔离的指令是该元素上唯一可以访问隔离作用域的指令之一。因此,创建范围是为了将指令和子元素与DOM的其余“级别”隔离开来

为什么多个指令不能获得相同的隔离作用域 将多个指令赋予相同的隔离作用域可能会导致作用域绑定配置冲突(多个指令可能会尝试绑定到隔离作用域上的相同属性)

为什么优先级较低的指令不能使用隔离作用域 一个简单而有说服力的论点是,元素上的
{{interpolated.expressions}}
需要在与
普通表达式
(提供给支持它们的指令)相同的范围内进行计算,否则整个事情将是一团糟。(插入
{{expressions}}
是单独完成的,因此在一个属性中接受
普通表达式
,在另一个属性中接受
字符串
的指令可以配置为根据不同范围计算的表达式。)


如果他们真的需要,他们可以访问隔离范围(但这需要启用)。如果它们的优先级低于创建隔离作用域的指令,则可以在其链接函数()中使用
元素.isolateScope()

这是有道理的,但与“当指令请求隔离范围时,AngularJS会专门为该指令创建一个范围,而不是为该指令所声明的元素。”在链接的SO问题中。你有证据证明这是错误的吗?我可以将你问题标题中的“新/隔离范围”减少为“隔离范围”吗?