无法删除 OpenLayers 3 中的功能

Jac*_*ian 2 javascript openlayers-3

我在 stackoverflow 上阅读了几十个线程,但没有一个有帮助。所以,这就是我尝试做的:

features.forEach(function(feature){
    source.removeFeature(feature); 
    console.log("removed");
    console.log(feature);
});
Run Code Online (Sandbox Code Playgroud)

结果,当我只选择了一项功能时,我会在控制台中看到以下消息:

removed Controller.js:525:8
Object { disposed_: false, onDisposeCallbacks_: undefined, ...}
Run Code Online (Sandbox Code Playgroud)

就我在控制台中看到的而言,一切看起来都不错。但问题是该特征并未从地图中移除。

编辑

现在更有趣了。如果我使用 getArray 将特征转换为数组并执行以下操作:

 for(var i=0,len=features.length;i<len;i++){
    var feature = features[i];
    source.removeFeature(feature);
 }
 source.clear();
Run Code Online (Sandbox Code Playgroud)

当我有很多功能并且只选择了一个功能时,那么在这种情况下,只有这个选定的功能会保留下来,而所有其余的功能都会被删除。到底他妈发生了什么??

小智 5

我有这个问题很长一段时间,我无法弄清楚。事实证明,这似乎是 OpenLayers 中的刷新问题。我发现让图层刷新的方法是使其不可见,然后再次可见。

这是我用来解决问题的代码(在 AngularJS 中):

vectorLayer.getSource().removeFeature(feature);
$timeout(function() {
    vectorLayer.setVisible(false);
    vectorLayer.setVisible(true);
}, 10);
Run Code Online (Sandbox Code Playgroud)

如果您不使用 Angular,只需使用以下内容:

vectorLayer.getSource().removeFeature(feature);
vectorLayer.setVisible(false);
vectorLayer.setVisible(true);
Run Code Online (Sandbox Code Playgroud)