いくつかのマーカーを表示する 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)
. このようにしても、配列内のすべての項目にダイジェスト サイクルが適用されていることがわかります:(