0

我有一个带有显示一些标记的 MapBox 地图的页面,以及一个显示每个标记的一些信息的面板。为此,我将标记添加到markers控制器拥有的数组中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