将参数传递给 oneachfeature 传单

ski*_*e3e 3 javascript leaflet typescript

我正在尝试传递一个参数以通过单击多边形来绑定它,我有以下内容:

var mapLayer = new L.TopoJSON(jsonMap, {style: style, onEachFeature: onEachFeature.bind(null,null,selectionManager), pane:'borders'}).addTo(this.map); 


 function onEachFeature(feature, layer, selectionManager) {
                    console.log(selectionManager)
                    layer.on({
                        mouseover: highlightFeature,
                        mouseout: resetHighlight,
                        click: dataFilter.bind(null,ID)
                    });
                }

 function dataFilter(selectionManager,e){
                    var layer = e.target;
                    var zoneName = layer.feature.properties.Index;
                    console.log(zoneName)
                    console.log(selectionManager);
                }
Run Code Online (Sandbox Code Playgroud)

所以我的目标是读取 dataFilter 中的一个参数(在这种情况下是 selectionManager)

Iva*_*hez 7

根据 Leaflet 文档,onEachFeature需要是一个接收两个参数(featurelayer)的函数。以Function.prototype.bind您使用它的方式使用它并不能满足您的要求。

相反,创建一个闭包

function onEachFeatureClosure(dataFilter) {
    return function onEachFeature(feature, layer) {
        // Your own logic, that uses dataFilter as well as feature and layer
    }
}

L.topoJSON(jsonMap, {
     style: style, 
     onEachFeature: onEachFeatureClosure(selectionManager),
     pane:'borders'
}).addTo(this.map);
Run Code Online (Sandbox Code Playgroud)

请注意,来自的返回值onEachFeatureClosure(selectionManager)是一个看起来像function onEachFeature(feat, layer) {...}.