Saya tahu saya bukan yang pertama bertanya tentang hal ini, tetapi saya tidak dapat menemukan jawaban dalam pertanyaan sebelumnya. Saya memiliki ini dalam satu komponen
<div class="col-sm-5">
<laps
[lapsData]="rawLapsData"
[selectedTps]="selectedTps"
(lapsHandler)="lapsHandler($event)">
</laps>
</div>
<map
[lapsData]="rawLapsData"
class="col-sm-7">
</map>
Dalam controller rawLapsdataakan dimutasi dari waktu ke waktu.
Dalam laps, data adalah output sebagai HTML dalam format tabel. Ini berubah setiap kali rawLapsdataberubah.
mapKomponen saya perlu digunakan ngOnChangessebagai pemicu untuk menggambar ulang marker di Google Map. Masalahnya adalah ngOnChanges tidak menyala ketika ada rawLapsDataperubahan pada induknya. Apa yang dapat saya?
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();
}
Pembaruan: ngOnChanges tidak berfungsi, tetapi sepertinya lapsData sedang diperbarui. Di ngInit adalah pendengar acara untuk perubahan zoom yang juga memanggil this.drawmarkers. Ketika saya mengubah zoom, saya memang melihat perubahan pada marker. Jadi satu-satunya masalah adalah saya tidak mendapatkan notifikasi pada saat input data berubah.
Pada orang tua, saya memiliki baris ini. (Ingat bahwa perubahan tercermin dalam putaran, tetapi tidak di peta).
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
Dan perhatikan bahwa this.rawLapsDataitu sendiri adalah pointer ke tengah objek json besar
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)harus dilakukan kemudian.
ngOnChanges()tidak akan dipanggil. Anda dapat menggunakan ngDoCheck()dan mengimplementasikan logika Anda sendiri untuk menentukan apakah isi array telah berubah. lapsDatadiperbarui karena memiliki / merupakan referensi ke array yang sama dengan rawLapsData.