我有这个基本的plnkr,它只是实现了一个基本的“Hello,X”指令。在我正在记录的链接功能中,scope.name
但我得到了undefined
?为什么会这样?它不应该name
在控制台中记录属性的值吗?
3 回答
这是一个已知的“问题”,其中属性的插值@
发生在调用链接函数之后。有一个拉取请求打开以更改此问题,但尚不清楚此问题是否将被合并。
同时,获取插值的一种方法是通过观察如下属性:
attrs.$observe('hello', function(changedValue){
console.log(scope.name);
});
和 plunk:http ://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p=preview
因此,归根结底,AngularJS 的这种行为有点令人困惑,将来可能会改变。
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.
对于那些在 2015 年阅读这篇文章的人,请注意 Angular 处理"@"
属性的方式已经改变。从 Angular 1.2 开始,插值发生在调用链接函数之前。
这里有一篇关于这个主题的优秀文章。