私は基本的に、バックボーンのコレクションで「追加」および「削除」イベントにバインドするのと同等のものを望んでいます。基本的に AngularJS でこれを行う方法はないと思います。私たちが解決した現在の回避策は$watch()
、配列を ing しlength
、全体を手動で比較/再計算することです。これは本当にクールな子供たちがすることですか?
編集:具体的には、配列の長さを見ると、どの要素が変更されたかを簡単に知ることができないため、手動で「差分」をとる必要があります。
私は基本的に、バックボーンのコレクションで「追加」および「削除」イベントにバインドするのと同等のものを望んでいます。基本的に AngularJS でこれを行う方法はないと思います。私たちが解決した現在の回避策は$watch()
、配列を ing しlength
、全体を手動で比較/再計算することです。これは本当にクールな子供たちがすることですか?
編集:具体的には、配列の長さを見ると、どの要素が変更されたかを簡単に知ることができないため、手動で「差分」をとる必要があります。
Angular で配列を監視する方法は次のとおりです。 $watch(array, function(){} ,true)
子スコープを作成し、それらを個別に監視します。以下に例を示します。
$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
}
おそらく解決策は、(バックボーンが行うように) コレクション クラスを作成することであり、イベントに簡単にフックすることもできます。
私がここで行った解決策は包括的ではありませんが、おそらくこれを行う方法についての一般的なガイダンスを提供するはずです.
ユースケースについて詳しく教えてください。要素の永続性を追跡するソリューションの 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);
});
}
}
});