在更新列表

时间:2015-06-25 09:33:04

标签: angularjs angularjs-scope angularjs-watch angular-digest

我有一个页面,其中一个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-repeatctrl.markers,但我添加和删除了ctrl.temp_markers项。当我完成更新后,我会ctrl.markers=ctrl.temp_markers.slice(0)。 即便以这种方式,我看到摘要周期适用于数组中的每个项目:(

0 个答案:

没有答案