2016-12-22 6 views
0

Я хотел бы добавить в массиве объектов, но он не работает: Can not set property '0' of undefinedAngular2 массива объекты

Я пытаюсь поставить в this.positions [0] = объект PositionMap

Я пониженный размер кода для лучшей читаемости, но остальное работает

Вот мой код:

import { Component, ViewChild, ElementRef } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 
import { Geolocation } from 'ionic-native'; 

declare var google; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 
export class HomePage { 

    positions: PositionMap[] = []; 

    @ViewChild('map') mapElement: ElementRef; 

    constructor(public navCtrl: NavController) { 
    this.positions = []; 
    } 

ionViewDidLoad(){ 
    this.loadMap(); 
    this.autocomplete(); 
    } 

    autocomplete() { 
     autocompleteDepart.addListener('place_changed', function() { 
     var place = autocompleteDepart.getPlace(); 
     let tmpPosition = new PositionMap(place.geometry.location.lat(), place.geometry.location.lng()); 
     this.positions[0] = (tmpPosition); 
     return; 
     }); 
    } 
} 

export class PositionMap { 
    latitude: number; 
    longitude: number; 
    constructor(_latitude: number, _longitude: number) { 
    this.latitude = _latitude; 
    this.longitude = _longitude; 
    } 
} 

Мой стол хорошо объявлен в классе и в конструкторе, но пока не известно в функции.

ответ

2

Вы используете this из функции обратного вызова. Эта функция обратного вызова должна быть сначала привязана к this. Самый простой способ - использовать функцию стрелки:

autocompleteDepart.addListener('place_changed',() => { 
    ... 
}); 
+0

Конечно, это работает! Большое спасибо за скорость – KyDenZ

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