Bunu ilk soran ben olmadığımı biliyorum, ancak önceki sorularda bir cevap bulamıyorum. Bunu tek bileşenim var
<div class="col-sm-5">
<laps
[lapsData]="rawLapsData"
[selectedTps]="selectedTps"
(lapsHandler)="lapsHandler($event)">
</laps>
</div>
<map
[lapsData]="rawLapsData"
class="col-sm-7">
</map>
Denetleyicide rawLapsdatazaman zaman mutasyona uğrar.
İçinde laps, veriler tablo biçiminde HTML olarak çıkarılır. Bu her rawLapsdatadeğiştiğinde değişir.
Benim mapbileşen ihtiyaçları kullanmak ngOnChangesbir Google Haritası üzerinde işaretleri yeniden çizmek için bir tetikleyici olarak. Sorun, ebeveynde rawLapsDatadeğişiklik olduğunda ngOnChanges'ın tetiklenmemesidir . Ne yapabilirim?
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();
}
Güncelleme: ngOnChanges çalışmıyor, ancak lapsData güncelleniyor gibi görünüyor. NgInit'te, aynı zamanda çağıran yakınlaştırma değişiklikleri için bir olay dinleyicisi vardır this.drawmarkers. Yakınlaştırmayı değiştirdiğimde, işaretçilerde gerçekten bir değişiklik görüyorum. Yani tek sorun, giriş verileri değiştiğinde bildirim almamam.
Ebeveynde bu satır var. (Değişikliğin turlara yansıdığını ancak haritaya yansıtılmadığını hatırlayın).
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
Ve bunun this.rawLapsDatakendisi büyük bir json nesnesinin ortasına bir işaretçi olduğunu unutmayın.
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)o zaman yapmalı.
ngOnChanges()çağrılmayacak. ngDoCheck()Dizi içeriklerinin değişip değişmediğini belirlemek için kendi mantığınızı kullanabilir ve uygulayabilirsiniz. lapsDataile aynı diziye bir başvuru olduğu için güncellenir rawLapsData.