如何在AngularJS中观察数组以进行更改

aby*_*byx 28 javascript angularjs angularjs-scope

我基本上希望在Backbone的集合中绑定到'add'和'remove'事件.我认为在AngularJS中基本上没办法做到这一点,我们已经解决的当前解决方法是$watch()使用数组length并手动区分/重新计算整个事物.这真的是很酷的孩子吗?

编辑:具体来说,观察数组的长度意味着我不知道哪个元素已被更改,我需要手动"diff".

Noé*_*aün 32

我认为使用$watch是一个很好的解决方案,但$watchCollection对你来说可能更好.$watchCollection不执行深度比较,只是观察数组修改,如插入,删除或排序(不是项目更新).

例如,如果要保持attribut order与数组顺序同步:

$scope.sortableItems = [
    {order: 1, text: 'foo'},
    {order: 2, text: 'bar'},
    {order: 3, text: 'baz'}
];

$scope.$watchCollection('sortableItems', function(newCol, oldCol, scope) {
    for (var index in newCol) {
        var item = newCol[index];
        item.order = parseInt(index) + 1;
    }
});
Run Code Online (Sandbox Code Playgroud)

但是对于您的问题,我不知道是否有比手动浏览阵列更好的解决方案来识别更改.


Jas*_*Als 12

在Angular中观看数组的方法是 $watch(array, function(){} ,true)

  • @Jason Als:谢谢,但这并没有告诉我哪个元素已被删除/添加.我编辑了这个问题,使其更清晰:) (2认同)