0

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

4

0 に答える 0