Javascript 如何使AngularJS指令在不隔离作用域的情况下清楚地定义其依赖关系

Javascript 如何使AngularJS指令在不隔离作用域的情况下清楚地定义其依赖关系,javascript,angularjs,angularjs-directive,angularjs-scope,directive,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Directive,我编写应用程序指令的方式是利用隔离作用域在父作用域中明确定义其依赖关系。所以我总是可以在我的HTML组件中实现这一点 <my-directive dependency-one="x" dependency-two="y"></my-directive> 然而,我已经阅读了AngularJS社区中的一些最佳实践,它们指出我们应该尽可能避免使用隔离作用域,因为这会增加应用程序的观察者和无用的绑定。仅在编写在应用程序上重用的组件时使用隔离作用域 据我所知,我们有两种可能性:

我编写应用程序指令的方式是利用隔离作用域在父作用域中明确定义其依赖关系。所以我总是可以在我的HTML组件中实现这一点

<my-directive dependency-one="x" dependency-two="y"></my-directive>
然而,我已经阅读了AngularJS社区中的一些最佳实践,它们指出我们应该尽可能避免使用隔离作用域,因为这会增加应用程序的观察者和无用的绑定。仅在编写在应用程序上重用的组件时使用隔离作用域

据我所知,我们有两种可能性:

  • 我们的指令不创建子范围
  • 我们的指令创建一个子作用域,它是继承父作用域的原型
我们可以通过这种方式防止创建新的作用域和不必要的绑定,但它会降低指令HTML标记的可读性和清晰度,现在我们只有以下内容:

<my-directive></my-directive>

看看这段代码,我不知道该指令需要执行什么,这与AngularJS引入的“声明性html”的优点背道而驰


有人对这个问题感兴趣吗?

如果没有独立的作用域,就很难有一个清晰的指令API。 因此,我并不完全同意“我已经阅读了AngularJS社区中的一些最佳实践,他们说我们应该尽可能避免使用隔离作用域,因为这会增加应用程序的观察者和无用的绑定”

如果您想要明确的依赖关系,您必须选择隔离作用域。 有一些方法可以减少手表和绑定的数量。
在这种情况下,以下url上的内容可能会有所帮助。@

如果没有隔离作用域,则仍然可以具有属性并访问这些值。在指令的保护下,仍然有很大的能力用属性做很多事情。我已经考虑过并尝试过了,但是我不喜欢它插入属性的方式。使用primitive,可以在HTML上显示插值,但例如,当您想通过指令的属性传递对象时,它会打印出json,这在HTML标记中看起来很难看。我只是提到它,因为您已经到了只显示标记的极限。
<my-directive></my-directive>