我知道,在一个元素上使用一个带有隔离作用域的指令会强制该元素上的所有其他指令使用相同的(一个)隔离作用域,所以这难道不严重限制了何时可以使用隔离作用域吗?
我希望Angular-UI团队的一些人(或者编写了许多指令的其他人)能够分享他们的经验。
请不要添加一个简单地说“为可重用组件使用隔离范围”的答案。
多好的问题啊!我很想听听别人怎么说,但下面是我使用的指导方针。
高度前提:作用域被用作我们用来在父控制器、指令和指令模板之间通信的“粘合剂”。
父作用域:scope:false
,因此根本没有新作用域
例如,我最近创建了一个指令,它使用我正在编写的SVG库绘制(静态)矢量图形。它$Observe
的两个属性(width
和height
)并在计算中使用这些属性,但它既不设置也不读取任何作用域变量,也没有模板。对于不创建另一个范围,这是一个很好的用例;我们不需要,那又何必麻烦呢?
但是,在另一个SVG指令中,我需要使用一组数据,并且还必须存储一点点状态。在这种情况下,使用父范围是不负责任的(通常来说)。所以相反...
子作用域:作用域:true
我发现自己使用子作用域的次数比使用隔离作用域或父作用域的次数多。
隔离作用域:作用域:{}
这是针对可重用组件的。-)
用更多的功能包围它或传递更多的功能,但指令是它已经是的。
尽管如此,我应该注意到,正如@Proloser在他的回答中暗示的那样,有一些方法可以绕过隔离范围的一些限制(即特性)。例如,在子作用域一节中,我提到了在使用隔离作用域时(默认情况下)对非指令属性中断的插值。但是用户可以使用class=“item-type-{{$parent.item.type}}”
,它将再次工作。因此,如果有令人信服的理由在子范围上使用隔离范围,但您担心其中的一些限制,请知道,如果需要,您可以处理几乎所有这些限制。
摘要
问题内容: 我正在寻找一些指南,可以用来帮助确定编写新指令时要使用的范围类型。理想情况下,我想要类似于流程图的内容,该流程将引导我解决一系列问题并弹出正确的答案- 没有新的新作用域,新的子作用域或新的孤立作用域-但这可能要求太多。这是我目前微不足道的准则集: 如果将使用指令的元素使用ng-model,请不要使用隔离范围。 如果指令不修改任何范围/模型属性,请不要创建新的范围 如果伪指令封装了一组D
问题内容: 如何更新指令中的作用域? 我的指令: 单击后指令不会更新。 问题答案: 使用方法:
问题内容: 我正在寻找访问指令中“父”范围的任何方式。范围,超越,要求,从上方传入变量(或范围本身)的任何组合,等等。我完全愿意向后弯腰,但我想避免某些完全不可靠或难以维护的事情。例如,我知道我现在可以通过从preLink参数中获取并对其范围进行迭代以找到概念上的“父级” 来做到这一点。 重要说明 是,该指令必须在同一父范围内可重用。因此,默认行为(作用域:false)对我不起作用。我需要为指令的
因此,我希望可以使用优先级来确保我的指令首先运行,并最终创建一个隔离范围,当运行时,它重用隔离范围,而不是创建一个原型上从父范围继承的范围。文档声明该指令在优先级下运行。尚不清楚是高优先级还是低优先级。当我在指令中使用优先级时,没有什么不同,所以我尝试了。但这使情况变得更糟:我的双向绑定变成,并且我的指令不显示任何内容。 我创造了一个小提琴来显示我的问题。我已经注释掉了指令中的设置。我有一个nam
我正在实现一个支持刷新令牌的OAuth2服务器,但是,有一些东西我不能完全理解。 当用户通过请求新的访问令牌,并且他/她请求的范围小于原始访问令牌的范围(5个范围中的3个)时。刷新令牌应该具有原始作用域还是刷新令牌应该具有请求的新作用域? > 如果刷新令牌请求了新的作用域,这是否意味着如果它们继续请求较小的作用域,它们最终将耗尽作用域? 刷新令牌是否应保留原始作用域?这意味着返回的访问令牌对于刷新
问题内容: 给定带有transclude和隔离范围的指令(),当链接该指令时,我具有以下范围: 我期望: 如果同一指令具有 共享作用域 而不是 隔离作用域 ,则可以得到预期的结果。 这给我带来了一个问题,因为,如果被包含的内容包含另一个具有隔离范围的指令(),则会得到: 我想使用这样的指令: 但是,这并不工作,里面,是因为不上合适的范围。 我有两个问题: 如果指令具有隔离的作用域,为什么作用域不是