局部变量undefined外部方法

时间:2017-11-02 03:54:48

标签: angular typescript

我有一个方法submitAdd()从另一个方法polygonDrawer()获取价值 问题是我在undefined方法获得submitAdd()值。 这似乎是一个问题。

polygonDrawer()

polygonDrawer()
{
var i;
var map;
var cords = [];
 google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {

            field.setPath(polygon.getPath().getArray());
            field.setMap(map);

            for (var i = 0; i < field.getPath().getLength(); i++) {
                cords.push(field.getPath().getAt(i).toUrlValue(6));
                text += field.getPath().getAt(i).toUrlValue(6) + "#";
            }                
            this.pointSTR2=text.slice(0, -1);
         });
}

submitAdd()

pointSTR2:any;

submitAdd() {
    console.log("**"+this.pointSTR2); // undefined

}

3 个答案:

答案 0 :(得分:1)

问题与范围有关,您可以通过两种方式解决此问题:

1)使用胖箭

function (polygon) {(polygon) => {

喜欢:

polygonDrawer()
{
    ...
    google.maps.event.addListener(drawingManager, 'polygoncomplete', (polygon) => {
        ....
        this.pointSTR2=text.slice(0, -1);
    });
}

2)使用.bind()

polygonDrawer()
{
    ...
    google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon){
        ....
        this.pointSTR2=text.slice(0, -1);
    }).bind(this);
}

答案 1 :(得分:0)

您有以下代码 async

google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {

如果要在之后使用可用的值,则需要对此函数进行链接。这样做的方法:

  • 回调
  • 承诺
  • 观测量

更多

在JavaScript中查找异步编程

答案 2 :(得分:0)

首先你需要在函数范围之外声明pointSTR2(作为全局变量)然后使用它

试试这个

pointSTR2 = ""
polygonDrawer()
{
var i;
var map;
var cords = [];
 google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {

            field.setPath(polygon.getPath().getArray());
            field.setMap(map);

            for (var i = 0; i < field.getPath().getLength(); i++) {
                cords.push(field.getPath().getAt(i).toUrlValue(6));
                text += field.getPath().getAt(i).toUrlValue(6) + "#";
            }                
            pointSTR2=text.slice(0, -1);
         });
}

然后使用pointSTR2关键字使用this

submitAdd() {
    console.log("**"+this.pointSTR2); // undefined    
}