我有这个基本的plnkr,它只是实现了一个基本的“Hello,X”指令。
在链接功能中,我正在记录scope.name
,但我得到了undefined
?为什么会这样?它不应该在控制台中记录name
属性的值吗?
答案 0 :(得分:14)
这是一个已知的“问题”,在调用链接函数后会发生@
属性的插值。有一个pull request open可以更改此问题,但目前尚不清楚是否要合并此问题。
与此同时,获取插值的一种方法是观察如下属性:
attrs.$observe('hello', function(changedValue){
console.log(scope.name);
});
而且:http://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p=preview
所以,在一天结束时,这是一个有点令人困惑的AngularJS行为,将来可能会改变。
答案 1 :(得分:2)
Pawel是正确的(https://stackoverflow.com/a/14552200/287070)但是我想补充一点,问题是在链接函数期间,任何包含{{}}插值的属性都将在attrs参数中设置为null作为第一个$ digest因为汇编尚未开始评估这些。
@ bindings在链接函数中为空的事实只是一个症状。
目前没有真正的修复,因为我们无法在编译过程中开始运行$摘要。所以$ observe(或$ watch)是获取这些值的唯一真正方法。
答案 2 :(得分:0)
对于2015年阅读此帖的人,请注意Angular处理"@"
属性的方式已发生变化。
Angular 1.2以后,插值发生在调用链接函数之前。
关于此主题的优秀帖子是present here。