10

我有这个基本的plnkr,它只是实现了一个基本的“Hello,X”指令。在我正在记录的链接功能中,scope.name但我得到了undefined?为什么会这样?它不应该name在控制台中记录属性的值吗?

4

3 回答 3

14

这是一个已知的“问题”,其中属性的插值@发生在调用链接函数之后。有一个拉取请求打开以更改此问题,但尚不清楚此问题是否将被合并。

同时,获取插值的一种方法是通过观察如下属性:

attrs.$observe('hello', function(changedValue){
     console.log(scope.name);
});

和 plunk:http ://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p=preview

因此,归根结底,AngularJS 的这种行为有点令人困惑,将来可能会改变。

于 2013-01-27T20:56:33.963 回答
2

Pawel is right (https://stackoverflow.com/a/14552200/287070) but I wanted to add that the problem is that any attribute that contains {{}} interpolation will be set to null in the attrs parameter during the link function as the first $digest since the compilation has not yet run to evaluate these.

The fact that @ bindings are null in linking functions is just a symptom of this.

Currently there is no real fix, since we can't start running $digests in the middle of the compilation process. So $observe (or $watch) is the only real way to get hold of these values.

于 2013-01-27T21:18:21.390 回答
0

对于那些在 2015 年阅读这篇文章的人,请注意 Angular 处理"@"属性的方式已经改变。从 Angular 1.2 开始,插值发生在调用链接函数之前。

这里有一篇关于这个主题的优秀文章。

于 2015-11-16T11:31:11.450 回答