什么是,从$ digest循环的角度来看,指令与
之间的区别scope:{foo:'='}
和一个
scope:{},
controller:function($scope, $attrs}{
$scope.$watch($attrs.foo, function(foodata){$scope.foo=foodata});
}
虽然大部分时间这些指令在指令上都有相同的结果,例如template='foo={{foo}}
,而且当属性值如{x:1,y:2}
(在不同的评估中从不===
时)两者都会收敛),前者甚至收敛于{x:1,y:number}
(其中number
在范围内从外部定义为2
),而后者最终在" 10 $digest() iterations reached. Aborting!
}"循环。
显然他们有不同的行为,但即使后者如何融合呢? (简单地使用前一种形式有帮助,但不能与scope:true
一起使用。)
请注意,在1.2.0和1.2.21之间的某个点上,这样的表达式永远不会收敛,即使它们完全是静态的"并通过'='
范围进行评估。
可以在http://plnkr.co/edit/mOhhQVPs4XqcTQ3TNMfI?p=preview上找到完整的示例。
答案 0 :(得分:0)
范围:{}。表示隔离范围,您可以访问范围。$ parent获取父范围,但您不能通过原型链获得继承属性。
范围:true。表示子范围,您可以访问范围。$ parent获取父范围,还可以通过原型链获得继承属性。
关于您的问题,它似乎与此fix有关。如果您希望它的行为相同,您应该将对象相等性检查添加到$ watch:
$scope.$watch($attrs.foo, function(foodata) {
$scope.foo=foodata;
}, true);