Angularjs 为什么a'=';作用域绑定的行为与$watch不同?
从$digest循环的角度来看,指令与Angularjs 为什么a'=';作用域绑定的行为与$watch不同?,angularjs,Angularjs,从$digest循环的角度来看,指令与 scope:{foo:'='} 还有一个 scope:{}, controller:function($scope, $attrs}{ $scope.$watch($attrs.foo, function(foodata){$scope.foo=foodata}); } ? 大多数情况下,它们在指令上的结果是相同的,比如说template='foo={{{foo},当属性值如{x:1,y:2}(在不同的求值中从来都不是==)时,它们都会收敛,而
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()迭代。正在中止!
”循环
显然,它们有不同的行为,但即使是后一种行为,如何使其收敛?(简单地使用前一种形式会有所帮助,但不适用于scope:true
)
请注意,在1.2.0和1.2.21之间的某一点上,这样的表达式永远不会收敛,即使它们是完全“静态”的,并通过'='
范围进行计算
可以在上找到完整的示例。作用域:{}。意味着隔离作用域,您可以访问作用域。$parent以获取父作用域,但不能通过原型链获取继承的属性 范围:true。表示子范围,您可以访问范围。$parent以获取父范围,还可以通过原型链获取继承的属性 关于您的问题,它似乎与此有关。如果您希望其表现相同,则应将对象相等性检查添加到$watch中:
$scope.$watch($attrs.foo, function(foodata) {
$scope.foo=foodata;
}, true);