4

angular 不会为具有两个指令的元素创建隔离范围,其中最高优先级指令没有隔离范围而较低优先级指令有,这是否正确?

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

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

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

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

4

1 回答 1

1

简短的回答的。

有 2 个指令需要一个隔离范围和一个父范围是没有意义的。这个想法是考虑指令如何相互配合。如果父作用域指令的作用域是隔离作用域,它如何正常工作?

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

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

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

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

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

于 2013-07-02T21:07:48.687 回答