29

私は基本的に、バックボーンのコレクションで「追加」および「削除」イベントにバインドするのと同等のものを望んでいます。基本的に AngularJS でこれを行う方法はないと思います。私たちが解決した現在の回避策は$watch()、配列を ing しlength、全体を手動で比較/再計算することです。これは本当にクールな子供たちがすることですか?

編集:具体的には、配列の長さを見ると、どの要素が変更されたかを簡単に知ることができないため、手動で「差分」をとる必要があります。

4

5 に答える 5

12

Angular で配列を監視する方法は次のとおりです。 $watch(array, function(){} ,true)

于 2013-03-28T12:41:18.840 に答える
3

子スコープを作成し、それらを個別に監視します。以下に例を示します。

$scope.myCollection = [];
var addChild = function()
{
  var Child = $scope.$new();
  Child.name = 'Your Name here';

  Child.$watch('name', function(newValue) {
     // .... do something when the attribute 'name' is changed ...
  });

  Child.$on('$destroy', function() {
    //... do something when this child gets destroyed 
  });


  $scope.myCollection.push(Child); // add the child to collection array

};

// Pass the item to this method as parameter, 
// do it within an ngRepeat of the collection in your views 
$scope.deleteButtonClicked = function(item)
{
  var index = $scope.myCollection.indexOf(item); //gets the item index
  delete $scope.myCollection[index]; // removes the item on the array
  item.$destroy(); // destroys the original items
}
于 2013-12-08T08:35:22.660 に答える
0

おそらく解決策は、(バックボーンが行うように) コレクション クラスを作成することであり、イベントに簡単にフックすることもできます。

私がここで行った解決策は包括的ではありませんが、おそらくこれを行う方法についての一般的なガイダンスを提供するはずです.

http://beta.plnkr.co/edit/dGJFDhf9p5KJqeUfcTys?p=preview

于 2013-03-28T14:19:08.670 に答える
0

ユースケースについて詳しく教えてください。要素の永続性を追跡するソリューションの 1 つは、要素の $destroy イベントをリッスンするカスタム ディレクティブで ngRepeat ディレクティブを使用することです。

<div ng-repeat="item in items" on-delete="doSomething(item)">

angular.module("app").directive("onDelete", function() {
    return {
        link: function (scope, element, attrs) {
            element.on("$destroy", function () {
                scope.$eval(attrs.onDelete);
            });
        }
    }
});
于 2013-03-28T13:04:24.870 に答える