Ionic:如何从嵌套方法访问构造函数对象?

时间:2018-06-20 20:09:41

标签: ionic-framework leaflet

我正在使用传单来绘制地图,并使用传单绘制来绘制形状。我能够绘制和保存形状以及检索形状。我正在努力与检索到的形状进行交互。

在我的特定情况下,我想启动一个弹出窗口。

myfile.ts

constructor(public popoverCtrl: PopoverController) {...}

drawShape(data) {
    let shape = {...} // has geometry etc.

    L.geoJSON(shape, {
        onEachFeature: this.onEachFeature
      }).addTo(this.myMap);
}


onEachFeature(feature, layer) {
    layer.on('click', function (e) {
    let popover = this.popoverCtrl.create('MyComponent', { layer: event });

    popover.present();
});

由于this.popoverCtrl的作用域与构造函数不同,因此我无法理解。如何获得对弹出框组件的访问权限?

谢谢您的任何建议!

1 个答案:

答案 0 :(得分:3)

因此您需要处理“ this”。为此,您可以使用胖箭头函数来执行此操作,因为它们不会像匿名函数和其他函数那样创建自己的“ this”:在layer.on部分中,我做了从匿名到胖箭头函数的更改:

onEachFeature(feature, layer) {
    layer.on('click', event => {
    let popover = this.popoverCtrl.create('MyComponent', { layer: event });

    popover.present();
});

有时候,如果您遍历各种执行上下文,您仍然会遇到从组件方法“获得”所需“此”的问题。在这种情况下,您也可以在组件方法中做到这一点:通过变量分配方法

onEachFeature = (feature, layer) => {
    layer.on('click', event => {
    let popover = this.popoverCtrl.create('MyComponent', { layer: event });

    popover.present();
});

这基本上可以防止您的方法创建自己的“ this”上下文。

PS:请注意,您的代码在函数的参数中对事件的定义不同,然后在代码中对事件的定义(e与事件),希望您可以解决此问题