【问题标题】:Angular 1.2 no longer allows multiple isolated scope directives on same element?Angular 1.2 不再允许在同一元素上使用多个隔离范围指令?
【发布时间】:2013-12-04 04:19:09
【问题描述】:

我在一个 Angular 项目中有一些代码,它们使用两个具有独立范围的独立指令。它们不需要共享范围,只需存在于同一个元素上。它们都以稍微不同的方式改变 DOM,并且重要的是绑定到作为参数传递的值。

这在 1.0 中有效,但是 Angular 1.2 现在在尝试执行此操作时会产生错误

多个指令要求新的/隔离的范围

根据项目的 git 历史,Angular 1.2 更改了行为以将同一元素上的两个独立指令分开。这是一件好事,当将两个“属性”指令放在同一个元素上时,它可以正常工作。

<div my:directive="myDirectiveData" my:other-directive="myOtherDirectiveData" />

按您的预期工作。

然而

<my:directive my:directive-data="myDirectiveData" my:other-directive="myOtherDirectiveData" />

抛出上述错误。 (多个指令要求新的/隔离的范围)

在这种情况下,我希望每个指令仍然与它们自己的非共享隔离范围并行存在。

在 Angular 1.2 中这仍然可能吗?

【问题讨论】:

  • 在角度一个元素可以有一个范围,所以你不能在同一个元素上创建两个独立的范围
  • 如果我在属性格式中使用两个指令,这在一个元素上似乎是可能的?
  • @JamesDavies,你是怎么做到的?
  • 我正在经历同样的情况。我现在最关心的是为什么想要两个独立的作用域是错误的。我基本上只想要两个不同的指令访问控制器“树”中的不同对象。

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

在同一元素上定义多个指令时发生的情况总结:

场景指令#1 指令#2 结果 1 no new scope no new scope 两个指令都使用控制器的作用域。 (这应该很明显。) 2 new scope new scope 两个指令share 一个新的子范围。 3 new scope no new scope 两个指令share 一个新的子范围。 为什么 dir #2 使用子范围? 这对我来说似乎很奇怪。 4 隔离范围没有新的范围Angular v1.0:两个指令share 隔离范围。 Angular v1.2+:dir #1 使用隔离范围, dir #2 使用控制器的作用域。

注意以下情况是不允许的(Angular 会抛出错误):

场景指令#1 指令#2 5 隔离作用域新作用域 6 隔离范围 隔离范围

【讨论】:

  • 感谢这些漂亮的图表。这些应该包含在官方文档中。
【解决方案2】:

您不能有多个指令要求在同一个元素上隔离范围。 我认为您的问题可能是由 angularjs 中的this unresolved issue 引起的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多