2016-09-26 3 views
2

У меня следующий, очень простой angular2 службы:Angular2 - свойство класса не определено, даже если она установлена ​​

@Injectable() 
export class DrawingService { 
    private _draw:Draw; 

    constructor(private mapSvc:MapService) {} 

    initialize(geometry: GeometryType):void { 
     this._draw = new Draw(this.mapSvc.getMap()); 
     this._draw.on("draw-end", this.addGraphic); 
     this._draw.activate(geometry); 
    } 


    addGraphic(evt):void { 
     this._draw.deactivate(); 
    } 
} 

В initialize, я устанавливаю метод addGraphic как обратного вызова. Теперь проблема заключается в том, что в рамках выполнения addGraphic значение this._draw не определено.

В чем проблема?

+0

Где вызывается 'initialize (geomotry)' от? – Martin

ответ

1

Если вы передаете ссылку метод как

this._draw.on("draw-end", this.addGraphic); 

ссылка на this указывает на функции вызывающего абонента.

Если вы используете вместо

this._draw.on("draw-end", this.addGraphic.bind(this)); 

он должен работать, как ожидалось.

В качестве альтернативы вы также можете использовать функции стрелок, но для этого требуется повторить параметры (если необходимо, чтобы они были переданы).

this._draw.on("draw-end", (param) => this.addGraphic(param)); 
+0

Спасибо, ваше решение работает отлично. – netik

0

Переместите код в ngOnInit() вместо конструктора. Вам придется реализовать OnInit.

Смежные вопросы