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

pig*_*ack 4 javascript angularjs

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

@或@attr - 将本地范围属性绑定到DOM属性的值.结果总是一个字符串,因为DOM属性是字符串.如果未指定attr名称,则假定属性名称与本地名称相同.范围的给定和窗口小部件定义:{localName:'@ myAttr'},然后窗口小部件范围属性localName将反映hello {{name}}的内插值.随着name属性的更改,widget命名空间上的localName属性也会更改.从父作用域(而不是组件作用域)读取名称.

= or = attr - 设置本地范围属性与通过attr属性的值定义的name的父范围属性之间的双向绑定.如果未指定attr名称,则假定属性名称与本地名称相同.范围的给定和窗口小部件定义:{localModel:'= myAttr'},然后窗口小部件范围属性localModel将反映父范围上的parentModel的值.对parentModel的任何更改都将反映在localModel中,localModel中的任何更改都将反映在parentModel中.

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

现在哪两个被认为是最佳实践?如果我使用the @属性,那么它将从DOM获取比直接取值更慢的值?

我对么?有什么建议?

Mar*_*cok 8

  • 如果指令需要更改值,请使用=来获取双向绑定.
  • 如果您想让其他阅读您的代码的人明白您只使用单向绑定,请使用@.
  • 如果你需要在逻辑函数访问值同步,使用=(见注约@ $和观察的异步行为在这里).

对于你的情况,@似乎是最好的.(尽管如何在HTML元素中使用指令和elementID也是有用的.)

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

另请参阅AngularJS中指令范围中"@"和"="之间的区别是什么?

  • +1我会添加......"如果您遇到内存问题,请不要隔离范围,而是在链接功能中手动设置$ watch和DOM操作". (2认同)