angularjs:指令链接函数中的日志记录范围属性显示为undefined

时间:2013-01-27 20:41:22

标签: angularjs javascript-framework

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

3 个答案:

答案 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