서비스에서로드하는 첫 번째 구성 요소를 구현하고 있으며 페이지를 처음로드 할 때 데이터가 표시되지 않지만 작동합니다. 페이지를 완전히 새로 고친 후이 구성 요소를보아야합니다 (공백으로로드). 다른 페이지로 이동하고 데이터를 반환하면 정상적으로로드됩니다. 누군가가 우리가 잘못하고있는 것에 대해 밝힐 수 있습니까? NgModule
구성서비스에서 호출 할 때 구성 요소가 첫 번째보기에로드되지 않습니다.
import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import { Http } from '@angular/http';
import { IRegion } from '../components/region.component';
@Injectable()
export class RegionService {
private baseServiceUrl: string;
private fetchedRegions: IRegion[];
constructor(private http: Http,
@Inject('BASE_URL') baseUrl: string)
{ this.baseServiceUrl = baseUrl }
getRegions(): Observable<IRegion[]> {
var url = this.baseServiceUrl + 'api/realm/regions';
this.http.get(url).subscribe(result => {
this.fetchedRegions = result.json() as IRegion[];
console.log('regions called. count:' + this.fetchedRegions.length);
}, error => {
console.error(error)
});
return of(this.fetchedRegions);
}
}
우리는 구성 요소가 여기에
<li [routerLinkActive]="['link-active']">
<a [routerLink]="['/regions']">
Regions
</a>
</li>
입니다 액세스하는 데 사용하는 링크 구성 요소 여기
import { Component, OnInit } from '@angular/core';
import { StbBaseComponent } from './StbBaseComponent';
import { IRegion } from './region.component';
import { RegionService } from '../services/region.service';
@Component({
selector: 'region-list',
templateUrl: './regionlist.component.html',
styleUrls: ['./regionlist.component.less']
})
export class RegionListComponent extends StbBaseComponent implements OnInit {
public regions: IRegion[];
public selectedRegion: IRegion;
constructor(private regionService: RegionService) {
super();
}
ngOnInit() {
this.getRegions();
}
onSelect(region: IRegion): void {
this.selectedRegion = region;
}
getRegions(): void {
this.regionService.getRegions().subscribe(regions => this.regions = regions);
}
}
입니다입니다
@NgModule({
declarations: [
AppComponent,
NavMenuComponent,
HomeComponent,
RegionListComponent
],
imports: [
CommonModule,
HttpModule,
FormsModule,
RouterModule.forRoot([
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'regions', component: RegionListComponent },
{ path: '**', redirectTo: 'home' }
])
],
providers: [RegionService]
})
비동기 작업,'(this.fetchedRegions)의 복귀가 .subscribe''this.http.get (URL),'하지 않습니다 – cyberpirate92
서비스 호출에 'subscribe()'를 추가하지 마십시오. 그냥 'map()'에 json을 반환합니다. – RRForUI