いくつかのマーカーを表示する MapBox マップと、各マーカーの情報を表示するパネルを含むページがあります。markersそのために、 controller が所有するという配列にマーカーを追加しctrlます。
map.featureLayer.on('layeradd', function(e)
{
var marker = e.layer;
//add marker to the list
ctrl.markers.push(marker);
});
次に、私のhtmlパネルには、次のようなものがあります
<div ng-repeat="marker in ctrl.getMarkers()">
{{marker.name}}
</div>
動作しますが、でマーカーを設定すると、追加されたマーカーごとmap.setGeoJSON(x)にイベントが発生します。on('layeradd')それぞれが自動的に$scope.$digest. 配列の監視を一時停止しmarkers、すべてのマーカーを追加してから再開する方法はありますか?
このソリューションを(codewallから)試しましたが、機能しません
$rootScope.$on('suspend', function ()
{
watchers = $rootScope.$$watchers;
$rootScope.$$watchers = [];
});
$rootScope.$on('resume', function ()
{
if (watchers)
$rootScope.$$watchers = watchers;
// discard our copy of the watchers
watchers = void 0;
});
.....
$rootScope.$broadcast('suspend');
map.setGeoJSON(x);
$rootScope.$broadcast('resume');
[更新 1]
@YOU が示唆したように、temp_array を使用して変更を加えようとしました。というわけで、今ng-repeatは を監視していますctrl.markersが、 にアイテムを追加したり削除したりしていctrl.temp_markersます。更新が完了したら、ctrl.markers=ctrl.temp_markers.slice(0). このようにしても、配列内のすべての項目にダイジェスト サイクルが適用されていることがわかります:(