Clickイベントの後、Angular2はChangeDetection
をトリガしません。以下のコードスニペットは、あるコンポーネントから別のコンポーネントにデータを取得することです。クリック後にAngular2火災の変化を検出しない
onClickEvent
(click)="$event.preventDefault(); setApartmentObject(FlatObject)";
ApartmentOverviewComponent
constructor(private _apart:ApartmentService) {}
setApartmentObject(flat:ApartmentObject) {
this._apart.setApartmentDetails(flat);
}
ApartmentService
Injectable()
export class ApartmentService {
apartmentDetails:ApartmentObject
getApartmentDetails():Observable<ApartmentObject> {
return Observable.create((observer) => {
observer.next(this.apartmentDetails);
observer.complete();
});
}
setApartmentDetails(value:ApartmentObject) {
this.apartmentDetails = value;
}
}
ApartmentDetailComponent
constructor(private _apart:ApartmentService)
get apartmentDetails() {
this._apart.getApartmentDetails().subscribe(data => {
this._apartmentDetails = data;
});
return this._apartmentDetails;
}
HTMLファイルで
<p><strong>{{apartmentDetails.name || 'Musterwohnung'}}</strong></p>
また、私は成功せず、持つEventEmitterでこの問題を解決しようとしました。次の汚れた修正のみが動作します:
constructor(private _ref:ChangeDetectorRef) {
this._ref.detach();
setInterval(() => {
this._ref.detectChanges();
}, 300);
}
私は問題を理解していません。 Angular runが検出を変更していて、それを防止したいのですか、または変更検出を実行しますがAngularは実行しませんか? –
何が起こると思いますか?なぜあなたはAngular2が変更検出を実行しないと思いますか? –
問題はangleがApartmentDetailComponentのApartmentOverviewComponentの1つのオブジェクトからデータをロードし、実際のデータで再レンダリングする必要があることです。私は、ApartmentDetailComponentのデータを取得しますが、changeDetectionはトリガーしないので、ビューは再レンダリングしません。そしてなぜ私は知りません。 – Zero