我正在阅读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'显示为字符串。
为什么你认为这可能是?
答案 0 :(得分:4)
首先,没有父范围。由于您的指令未声明范围(孤立或"正常"),因此没有创建范围,因此该元素与其父元素共享相同的范围。
<子>
使用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}}属性的当前值。