Я знаю, що я не перший, хто запитав про це, але не можу знайти відповідь у попередніх питаннях. Я маю це в одному компоненті
<div class="col-sm-5">
<laps
[lapsData]="rawLapsData"
[selectedTps]="selectedTps"
(lapsHandler)="lapsHandler($event)">
</laps>
</div>
<map
[lapsData]="rawLapsData"
class="col-sm-7">
</map>
У контролері rawLapsdata
час від часу мутується.
В laps
, дані виводяться в вигляді HTML в текстовому форматі. Це змінюється щоразу, коли rawLapsdata
змінюється.
Мій map
компонент потрібно використовувати ngOnChanges
як тригер для перемальовування маркерів на карті Google. Проблема полягає в тому, що ngOnChanges не спрацьовує при rawLapsData
змінах у батьків. Що я можу зробити?
import {Component, Input, OnInit, OnChanges, SimpleChange} from 'angular2/core';
@Component({
selector: 'map',
templateUrl: './components/edMap/edMap.html',
styleUrls: ['./components/edMap/edMap.css']
})
export class MapCmp implements OnInit, OnChanges {
@Input() lapsData: any;
map: google.maps.Map;
ngOnInit() {
...
}
ngOnChanges(changes: { [propName: string]: SimpleChange }) {
console.log('ngOnChanges = ', changes['lapsData']);
if (this.map) this.drawMarkers();
}
Оновлення: ngOnChanges не працює, але виглядає так, ніби lapsData оновлюється. У ngInit - слухач подій для зміни масштабу, який також викликає this.drawmarkers
. Коли я змінюю зум, я дійсно бачу зміну маркерів. Тож єдине питання полягає в тому, що я не отримую сповіщення під час зміни вхідних даних.
У батьків є такий рядок. (Нагадаємо, що зміна відображена в колі, але не в карті).
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
І зверніть увагу, що this.rawLapsData
сам по собі вказівник на середину великого об'єкта json
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)
має робити це тоді.
ngOnChanges()
не буде викликаний. Ви можете використовувати ngDoCheck()
та реалізувати власну логіку, щоб визначити, чи змінився вміст масиву. lapsData
оновлюється, оскільки має / посилається на той самий масив, що і rawLapsData
.