【发布时间】:2013-01-11 04:48:50
【问题描述】:
我有这个基本的plnkr,它只是实现了一个基本的“Hello,X”指令。
在链接功能中,我正在记录scope.name,但我得到undefined?为什么会这样?它不应该在控制台中记录name属性的值吗?
【问题讨论】:
标签: angularjs javascript-framework
我有这个基本的plnkr,它只是实现了一个基本的“Hello,X”指令。
在链接功能中,我正在记录scope.name,但我得到undefined?为什么会这样?它不应该在控制台中记录name属性的值吗?
【问题讨论】:
标签: angularjs javascript-framework
这是一个已知的“问题”,@ 属性的插值发生在调用链接函数之后。有一个pull request open 来改变这个问题,但不清楚这个是否会被合并。
与此同时,获取插值的一种方法是通过观察如下属性:
attrs.$observe('hello', function(changedValue){
console.log(scope.name);
});
还有笨蛋:http://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p=preview
因此,归根结底,AngularJS 的这种行为有点令人困惑,将来可能会改变。
【讨论】:
{{ }} 表达式尚未计算,在链接阶段,它返回未定义。但是,使用常量字符串而不是插值会返回正确的值。
"@" 属性的插值发生在调用链接函数之前。请参阅this 的帖子。
Pawel 是对的 (https://stackoverflow.com/a/14552200/287070) 但我想补充一点,问题是任何包含 {{}} 插值的属性都将在链接函数期间的 attrs 参数中设置为 null,作为自尚未运行编译来评估这些。
@bindings 在链接函数中为 null 的事实只是一个症状。
目前还没有真正的修复,因为我们无法在编译过程中开始运行 $digests。因此,$observe(或 $watch)是获取这些值的唯一真正方法。
【讨论】:
对于那些在 2015 年阅读这篇文章的人,请注意 Angular 处理 "@" 属性的方式已经改变。
从 Angular 1.2 开始,插值发生在调用链接函数之前。
present here 是一个关于这个主题的优秀帖子。
【讨论】: