Bileşen işlenmeden önce API'mdan bir olay yüklemeye çalışıyorum. Şu anda bileşen ngOnInit işlevinden çağrı API hizmetini kullanıyorum.
Benim EventRegisterbileşen:
import {Component, OnInit, ElementRef} from "angular2/core";
import {ApiService} from "../../services/api.service";
import {EventModel} from '../../models/EventModel';
import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteParams, RouterLink} from 'angular2/router';
import {FORM_PROVIDERS, FORM_DIRECTIVES, Control} from 'angular2/common';
@Component({
selector: "register",
templateUrl: "/events/register"
// provider array is added in parent component
})
export class EventRegister implements OnInit {
eventId: string;
ev: EventModel;
constructor(private _apiService: ApiService,
params: RouteParams) {
this.eventId = params.get('id');
}
fetchEvent(): void {
this._apiService.get.event(this.eventId).then(event => {
this.ev = event;
console.log(event); // Has a value
console.log(this.ev); // Has a value
});
}
ngOnInit() {
this.fetchEvent();
console.log(this.ev); // Has NO value
}
}
Benim EventRegisterşablon
<register>
Hi this sentence is always visible, even if `ev property` is not loaded yet
<div *ngIf="ev">
I should be visible as soon the `ev property` is loaded. Currently I am never shown.
<span>{{event.id }}</span>
</div>
</register>
API hizmetim
import "rxjs/Rx"
import {Http} from "angular2/http";
import {Injectable} from "angular2/core";
import {EventModel} from '../models/EventModel';
@Injectable()
export class ApiService {
constructor(private http: Http) { }
get = {
event: (eventId: string): Promise<EventModel> => {
return this.http.get("api/events/" + eventId).map(response => {
return response.json(); // Has a value
}).toPromise();
}
}
}
Bileşen, ngOnInitişlevdeki API çağrısı veriler getirilmeden önce oluşturulur . Bu yüzden görünüm şablonumda etkinlik kimliğini hiçbir zaman göremiyorum. Yani bu bir ASYNC problemi gibi görünüyor. Özellik ayarlandıktan sonra ev( EventRegisterbileşen) bağlama bazı işler yapmak bekleniyor ev. Ne yazık ki özellik ayarlandığında divile işaretli göstermez *ngIf="ev".
Soru: İyi bir yaklaşım mı kullanıyorum? Değilse; Bileşen oluşturulmaya başlamadan önce veri yüklemenin en iyi yolu nedir?
NOT:ngOnInit yaklaşım bu kullanılan angular2 öğretici .
DÜZENLE:
İki olası çözüm. Birincisi, işlevde fetchEventAPI hizmetini bırakmak ve kullanmaktı ngOnInit.
ngOnInit() {
this._apiService.get.event(this.eventId).then(event => this.ev = event);
}
İkinci çözüm. Verilen cevap gibi.
fetchEvent(): Promise<EventModel> {
return this._apiService.get.event(this.eventId);
}
ngOnInit() {
this.fetchEvent().then(event => this.ev = event);
}

fetchEventfonksiyonu ve sadece koymakapiService.get.eventfonksiyonungOnInitve ben intendend olarak işe yaradı. Teşekkürler! Bana da izin verir vermez cevabını kabul edeceğim.