我有一个页面,其中一个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)
。
即便以这种方式,我看到摘要周期适用于数组中的每个项目:(