Angular中有2 ways to watch a group of variables。但它们之间的区别是什么?
他们似乎都做浅表。是否存在一个明显优于另一个的情况?
答案 0 :(得分:30)
SELECT permits.zipCode,SUM( payments.payment)
FROM permits
INNER JOIN Payments
ON payments.permitID = permits.permitID
GROUP BY permits.zipCode
会浅看单个对象上的属性,并在其中一个更改时通知您。
$watchCollection
会观看一组个人表情。
它们在功能上并不相同。当您想要观看应该响应同一回调的多个表达式时,可以使用$watchGroup
- 这些表达式可以是针对不同对象的单个表达式。这可用于观看$watchGroup
,'foo'
和'foo.bar'
。这些是3个不同的目标 - 'baz.qux'
,foo
' foo
属性和bar
' baz
属性,但它们都是委托给同一个处理程序。
相比之下,qux
只会浅看单个对象。这使得对象可能会更好地改变它的属性(例如 - 我们自己的$watchCollection
)。为了与我们的垃圾名称示例保持一致,要实现与上述相同的操作,您只需要观看$scope
和foo
,但会在baz
和{{1}中通知您。 (而不是仅仅通知foo
本身,baz
和foo
的更改。
答案 1 :(得分:11)
以下是您使用每一个的示例。
$scope.data = ['Abc', 'Bcd', 'Cde', 'Def'];
$scope.$watchCollection('data', function(){...});
// responds to changes within $scope.data
// The following line will trigger the watch function:
$scope.data[0] = 'FOO';
-
$scope.data = ['Abc', 'Bcd', 'Cde', 'Def'];
$scope.$watchGroup('data', function(){...});
// responds to changes on the properties (or functions, etc.)
// Any angular expression can be used in $scope.data
// The following line will trigger the watch function:
$scope.Abc = 'FOO';