如果最高优先级指令没有,则Element不会获得隔离范围

时间:2013-07-02 15:11:15

标签: angularjs angularjs-directive angularjs-scope

对于具有两个指令的元素,如果最高优先级指令没有隔离范围且优先级较低的指令有效,那么angular是否正确无法创建隔离范围?

我有以下有两个指令和一个控制器的plunker:

http://plnkr.co/edit/zEnMH6h0ILURHSgx0DLX?p=preview

如果打开控制台,则可以看到指令和控制器范围的日志。 noIsoScope指令没有隔离范围,优先级为1. isoScope作用域指令具有隔离范围,但优先级为0.当我独立使用每个指令时,一切都作为例外。当我同时使用它们时,isoScope指令显示它使用控制器作用域(因为它基于日志,它具有相同的$ id)而不是它自己的。

我是否必须确保每当我在元素上使用多个指令时,如果其中一个具有隔离范围,那么它必须具有最高优先级?

1 个答案:

答案 0 :(得分:1)

简短回答

让2个指令同时需要隔离范围 AND 父范围是没有意义的。我们的想法是考虑指令如何相互协作。如果父作用域具有隔离范围,那么父作用域指令如何正常工作?

我想有角度的团队决定不在这种情况下发出警告(可能是一个错误)。

  • 如果较低优先级需要隔离范围,这意味着它对父范围的数据有严格的要求
  • 如果较高优先级不需要范围,则意味着它将继承父范围并可能在模板中使用该数据。

这是一个捕获22的情况: non isolate指令使用隔离范围是没有意义的,因为它可能取决于它不是孤立的事实。 同时,隔离指令很可能取决于它是孤立的事实。

来自Igor Minar,他正在讨论多个隔离范围,但基本上是同一个问题:

  

我的建议是在创建由模板支持的可重用组件时使用隔离范围。如果你想要将多个指令组合在一起,你应该以一种方式设计它们,使一个指令成为主指令(使用模板),其他指令只是辅助指令(在某些编程语言中类似于特征或混合)。 / p>