Angular指令链接attrs

时间:2014-04-05 13:50:54

标签: angularjs

我正在阅读Angular文档,并对指令有疑问。这是关于http://docs.angularjs.org/guide/directive

的“创建操纵DOM的指令”部分

我在以下代码中添加了一些console.log()语句:

scope.$watch(attrs.myCurrentTime, function(value) {
  format = value;
  updateTime();
});
像这样:

scope.$watch(attrs.myCurrentTime, function(value) {
  console.log('attrs.myCurrentTime = ', attrs.myCurrentTime);
  console.log('value = ', value);
  format = value;
  updateTime();
});

当更改“日期格式”文本框的内容时,我希望在两个console.log()语句中看到相同的值,即父作用域的format属性的实际值,但是第一个console.log ()仍然将'format'显示为字符串。

为什么你认为这可能是?

代码链接:http://plnkr.co/edit/8LkKBiIpqTn0gr5fXQZL?p=preview

1 个答案:

答案 0 :(得分:4)

首先,没有父范围。由于您的指令未声明范围(孤立或&#34;正常&#34;),因此没有创建范围,因此该元素与其父元素共享相同的范围。 <子> 使用DevTools检查元素范围的快速简便方法是:
 1.在&#34; Elements&#34;中选择元素。面板。
 2.在控制台中,执行命令:angular.element($0).scope();


那么,究竟发生了什么?

attrs.myCurrentTime代表一个普通的旧字符串值(即&#34;格式&#34;) 因此console.log('attrs.myCurrentTime = ', attrs.myCurrentTime);相当于console.log('attrs.myCurrentTime = ', 'format');

同样,scope.$watch(attrs.myCurrentTime, ...)相当于scope.$watch('format', ...) 根据 docs on Scope ,如果$watch的第一个参数是字符串,则&#34;评估为 expression &#34; ,在这种情况下表示为scope['format'](当然会返回范围&{39}}属性的当前值。