我有一个带有显示一些标记的 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)
。即使以这种方式,我看到摘要循环适用于数组中的每个项目:(