所以我有这个使用 Angular 1.2 RC2 的代码示例,一切正常,您单击句柄以切换内容的显示,并且控制器和指令按预期具有单独的范围:
http://plnkr.co/edit/e3XAZuhSMAxmkWzKKM39?p=preview
现在我昨天升级到 Angular RC3,现在功能无法正常工作,因为它在 plunker 中,我得到了特定需要通用的错误,这是找不到的。通过更改日志,我认为这可能与这个重大更改有关:
$compile: due to 31f190d4, the order of postLink fn is now mirror opposite of the order in which corresponding preLinking and compile functions execute
为了解决这个问题,他们建议将帖子链接转换为预链接(我可以这样做,因为我的帖子链接需要访问预链接中不可用的范围)或降低指令的优先级。所以这个 plunker 可以做到这一点并且功能确实有效:
http://plnkr.co/edit/arP3aruH8HEdiwFg6mWp?p=preview
但是有一个主要问题,现在因为特定具有更高的优先级,不再创建通用需要的隔离范围,所以现在 contentVisible 位于控制器范围内,这并不好。
现在我可以将 scope: {} 从通用指令移动到特定指令,但是应该可以单独使用通用指令,如果我这样做,它将附加到它所属的任何范围,而不是它自己的(将无法拥有该指令的多个实例,这是它需要自己的范围的方式)。
我唯一能想到的就是添加一个指令,称为 isoScope,确保它具有非常高的优先级,并让它定义范围:{}。然后,如果我需要单独使用泛型,我只需要确保还添加 isoScope 指令以确保它具有隔离范围。像这样:
http://plnkr.co/edit/1NYHpUcPFWEbAzvkCeRH?p=preview
现在我希望有一种更好的方法可以在没有isolateScope 指令的情况下完成我正在寻找的东西。如果没有那个,我会错过这种方式吗?
更新示例
所以这里是另一个 plunker,其中包括我想要传达的更好的例子(仍然几乎没有风格,但不应该需要传达这一点):
http://plnkr.co/edit/KtRMa1c9giDrhi1Rqyho?p=preview
我有 3 个指令:
- 膨胀机
- 通知
- 隔离范围
扩展器指令仅添加能够扩展和折叠内容的功能,仅此而已。此功能应该能够单独使用或与另一个指令一起使用(这就是它具有控制器的原因)。
notification 指令用于显示通知,但是由于我们不想一直显示通知,我们将它与 expander 指令一起使用,以便用户可以切换实际通知的显示(类似于 stackoverflow.com 的方式)它在左上角)。
虽然我认为扩展器很可能与另一个指令一起使用,但它应该可以单独使用,这就是isolateScope 指令发挥作用的地方。由于扩展器指令将数据添加到范围,并且您可能希望在同一页面上有多个扩展器,因此它需要具有隔离范围才能工作。现在在用户个人资料页面上,您拥有开发人员密钥和地址等数据,您实际上并不需要一直显示这些数据,因此让用户控制它。我有隔离范围能够独立控制这两个范围,因为没有隔离范围,它们都将位于同一范围内并由 contentVisible 上的同一实例控制。
我只是看不到指令现在如何在 1.2.0 RC3 中运行,以便能够在没有该isolateScope 指令的情况下完成此任务(尽管我很高兴被证明是错误的)。