Как поместить объект в массив в angular2 и машинописном тексте?

Я определил массив следующим образом:

markers: marker[] = [
    {
      lat: 51.673858,
      lng: 7.815982,
      label: 'A',
      draggable: true
    }
  ];

Я получаю данные из службы отдыха и подталкиваю новый объект к маркерам.

private data: any;
  findLocation(): void {
    let result;
    result =   this.geoService.loaddata(this.location)
     .subscribe(data => {
       result = data;
       console.log(result);
       this.markers.push({'lat':results[0].geometry.location.lat,'lng':results[0].geometry.location.lng})
     });
  }

он выдает ошибку, говоря, что файл:

message: 'Аргумент типа' {'lat': любой; } 'не может быть назначен параметру типа' marker '. Свойство 'lng' отсутствует в типе '{' lat ': any; } '.'

результат

{"results": [{"address_components": [{"long_name": "Colombo", "short_name": "Colombo», "types": ["locality", "policy"]}, {"long_name": ") Коломбо "," короткое_имя ":" Коломбо "," типы ": [" административная_ область_уровня_2 "," политическая "]}, {" длинное_имя ":" Западная провинция "," короткое_имя ":" WP "," типы ": [" административный_район_уровень_1 "," политический "]}, {" длинное_имя ":" Шри-Ланка "," короткое_имя ":" ЛК "," типы ": [" страна "," политическое "]}]," форматированный_адрес ":" Коломбо, Шри-Ланка "," геометрия ": {" границы ": {" северо-восток ": {" широта ": 6.9812866, "lng": 79.8900852}, "юго-запад": {"lat": 6.862390700000001, "lng": 79.8223258}}, "location": {"lat": 6.9270786, "lng": 79.861243}, "location_type": "ПРИБЛИЗИТЕЛЬНО "," viewport ": {" northeast ": {" lat ": 6.980584400000001," lng ": 79.8900852}," Southwest ": {" lat ": 6.8625113," lng ": 79.8225192}}}," place_id ":" ChIJA3B6D9FT4joRjYPTMk0uCzI "," типы ": [" местность "," политическая "]}]," статус ":" ОК "}


person Sajeetharan    schedule 25.01.2017    source источник
comment
почему два lat в вашем json?   -  person asdf_enel_hak    schedule 25.01.2017
comment
Что в результате [0]   -  person Mitesh Pant    schedule 25.01.2017


Ответы (3)


Вы подписали свои данные на result, а не на results.

private data: any;
  findLocation(): void {
    let result;
    // no use for "result" below
    // result = this.geoService.loaddata(this.location)
    // use the following instead
    this.geoService.loaddata(this.location)
     .subscribe(data => {
       result = data;
       console.log(result);
       this.markers.push({'lat':results[0].geometry.location.lat,'lng':results[0].geometry.location.lng})
     });
  }

так что ваш толчок должен выглядеть так:

this.markers.push({'lat':result[0].geometry.location.lat,'lng':result[0].geometry.location.lng})
         });

Но это тоже вызовет ошибку, потому что в маркерах вы также объявили label и draggable, поэтому вам также нужно передать значения этим атрибутам.

person AJT82    schedule 25.01.2017

Похоже, у вас простая опечатка:

this.markers.push({
    'lat': results[0].geometry.location.lat,
    'lat': results[0].geometry.location.lng
})

должно быть:

this.markers.push({
    'lat': results[0].geometry.location.lat,
    'lng': results[0].geometry.location.lng
})
person Brandon    schedule 25.01.2017
comment
Вы все еще получаете ту же ошибку? Учитывая форму данных, которые вы добавили в свой вопрос, иерархия выглядит правильной. - person Brandon; 25.01.2017
comment
хорошо, извините, ребята, мне не хватало метки двух других свойств и перетаскивания - person Sajeetharan; 25.01.2017
comment
Для тех, кто пытается найти разницу, обратите внимание на широту / долготу второго ввода. Мне потребовалось много времени, чтобы найти. - person Dion Jakobs; 21.01.2019

Прежде всего, у вас есть опечатка, вы обращаетесь к переменной с именем results, но там только result.

Во-вторых, эта переменная результата не имеет смысла. Попробуй это:

// private data: any; // Remove this field
findLocation(): void {
    // no result variable here
    this.geoService.loaddata(this.location)
    .subscribe(results => { // declare results this way
        console.log(results);
        this.markers.push({
          'lat':results[0].geometry.location.lat,
          'lnt':results[0].geometry.location.lng
        });
    });
}
person Tamas Hegedus    schedule 25.01.2017