私はこれについて最初に質問するのではないことを知っていますが、これまでの質問では答えが見つかりません。私はこれを1つのコンポーネントで持っていますAngular2変化の検出:ngOnChangesがネストされたオブジェクトに対して発砲しない
コントローラでは、rawLapsdata
は時々突然変更されます。
laps
には、データが表形式でHTMLとして出力されます。 rawLapsdata
が変更されるたびに変更されます。
私のmap
コンポーネントは、ngOnChanges
をGoogleマップのマーカーを再描画するためのトリガーとして使用する必要があります。問題は、rawLapsData
が親で変更されたときにngOnChangesが起動しないことです。私に何ができる?
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);
とデータはあなたがzone.run(...)
内のデータupateステートメントを実行する必要があります外部ライブラリから来る場合this.rawLapsData
が大きいJSONオブジェクト
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
コードには、データの更新方法やデータの種類は表示されません。新しいインスタンスが割り当てられているか、値のプロパティに変更されていますか? –
@GünterZöchbauer親コンポーネントから行を追加しました –
'zone.run(...) 'にこの行をラップすると思います。 –