AngularJs通过链接和范围访问属性差异

时间:2013-11-20 05:42:28

标签: angularjs angularjs-directive angularjs-scope

任何人都可以解释从范围访问指令属性之间的区别,如:

scope: { someVar: '=' }

vs

link: function (scope, elem, attr, ctrl) {
  attr.someVar
}

似乎两者都做了同样的事情。

1 个答案:

答案 0 :(得分:2)

来自AngularJS ng.$compile docs

  

=或= attr - 设置本地范围属性与通过attr属性值定义的name的父范围属性之间的双向绑定...对parentModel的任何更改都将反映在localModel中,并且localModel将反映在parentModel中。

换句话说,这会在属性上创建一个监视,导致父范围或指令范围中的模型更改反映在另一个范围内。

引用该属性只返回一个字符串。因此,如果您有一个指令foo,并且您的HTML看起来像

<foo some-var="bar"></foo>

在您的链接功能中,attr.someVar将是字符串文字"bar"。您可以随时通过调用bar(或scope.$eval(attr.someVar),如果指令具有隔离范围)来评估范围中的scope.$parent.$eval(attr.someVar),但不是为您完成的。