すべてのアイテムを監視するために監視しない大きな配列を持つリピーターを持つこと。
1 つの引数と配列への式を受け取るカスタム ディレクティブを作成する必要があります。次に、リンク関数でその配列を監視するだけで、リンク関数にプログラムで HTML を更新させることができます ( ng-リピート)
(疑似コード) のようなもの:
app.directive('leanRepeat', function() {
return {
restrict: 'E',
scope: {
'data' : '='
},
link: function(scope, elem, attr) {
scope.$watch('data', function(value) {
elem.empty(); //assuming jquery here.
angular.forEach(scope.data, function(d) {
//write it however you're going to write it out here.
elem.append('<div>' + d + '</div>');
});
});
}
};
});
...お尻の痛みのようです。
代替のハック手法
ループして、削除したい式と一致するかどうか$scope.$$watchers
を調べてから、簡単な呼び出しで削除できる場合があります。ここでの PITA は、タグ間のようなものが式になり、キャリッジ リターンも含まれるということです。$scope.$$watchers[0].exp.exp
splice()
Blah {{whatever}} Blah
利点として、ng-repeat の $scope をループしてすべてを削除し、必要なウォッチを明示的に追加することができる場合があります...わかりません。
いずれにせよ、それはハックのようです。
$scope.$watch によって作成されたウォッチャーを削除するには
呼び出し$watch
によって返された関数でa の登録を解除できます。$watch
たとえば、一$watch
度だけ発火させるには:
var unregister = $scope.$watch('whatever', function(){
alert('once!');
unregister();
});
もちろん、いつでも登録解除機能を呼び出すことができます...これは単なる例です。
結論:あなたが求めていることを正確に行うための素晴らしい方法は本当にありません
しかし、考慮すべきことが 1 つあります。心配する価値があるのでしょうか。さらに、何千ものレコードをそれぞれ数十の DOMElement にロードすることは本当に良い考えでしょうか? 思考の糧。
それが役立つことを願っています。
EDIT 2(悪い考えを削除)