4

从 Directives 文档中它说以这两种方式继承范围:

@ 或 @attr - 将本地范围属性绑定到 DOM 属性的值。结果始终是字符串,因为 DOM 属性是字符串。如果未指定 attr 名称,则假定属性名称与本地名称相同。给定范围的小部件定义:{ localName:'@myAttr'},然后小部件范围属性 localName 将反映 hello {{name}} 的插值。随着 name 属性的变化,小部件范围上的 localName 属性也会发生变化。该名称是从父范围(不是组件范围)读取的。

= 或 =attr - 在本地范围属性和通过 attr 属性值定义的 name 的父范围属性之间建立双向绑定。如果未指定 attr 名称,则假定属性名称与本地名称相同。给定范围的widget定义:{localModel:'=myAttr'},那么widget范围属性localModel将在父范围上反映parentModel的值。对 parentModel 的任何更改都将反映在 localModel 中,而对 localModel 的任何更改都将反映在 parentModel 中。

考虑到我想传递 elementId,它只是一个 id,我可以通过 =elementId 或 @elementId 传递它。

现在这两者中的哪一个被认为是最佳实践?如果我使用@and 因此属性,它会从 DOM 中获取值,这比直接获取值要慢吗?

我对么?有什么建议么?

4

1 回答 1

8
  • 如果指令需要更改值,请使用 = 来获得双向绑定。
  • 如果您想让其他阅读您的代码的人清楚您只使用单向绑定,请使用 @。
  • 如果您需要同步访问链接函数中的值,请使用 =(请参阅此处有关 @ 和 $observe 的异步行为的注释

对于您的情况,@ 似乎是最好的。(不过,如何在 HTML 元素中使用指令和 elementID 的示例会很有帮助。)

我不知道哪个更慢/更快。

另请参阅AngularJS指令范围内的'@'和'='有什么区别?

于 2013-02-07T20:36:47.027 回答