AngularJS在指令中继承范围的最佳实践

时间:2013-02-07 18:22:26

标签: javascript angularjs

从Directives文档中可以看出以这两种方式继承范围:

  

@或@attr - 将本地范围属性绑定到DOM的值   属性。由于DOM属性,结果总是一个字符串   字符串。如果未指定attr名称,则属性名称为   假设与本地名称相同。范围的给定和小部件定义:{localName:'@ myAttr'},   那么widget作用域属性localName将反映插值   hello {{name}}的值。由于名称属性发生了变化,因此   小部件范围上的localName属性。该名称是从   父范围(不是组件范围)。

     

=或= attr - 在本地范围属性和通过值定义的名称的父范围属性之间设置双向绑定   oftr属性。如果未指定attr名称,则为该属性   假定name与本地名称相同。给定范围的小部件定义:{   localModel:'= myAttr'},然后是widget范围属性localModel   反映父范围内parentModel的值。任何改变   parentModel将反映在localModel和任何更改中   localModel将反映在parentModel中。

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

现在哪两个被认为是最佳做法?如果我使用@因此使用属性,它将从DOM中获取比直接获取值更慢的值吗?

我说错了吗?有什么建议吗?

1 个答案:

答案 0 :(得分:8)

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

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

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

另见What is the difference between '@' and '=' in directive scope in AngularJS?