サービスからロードされる最初のコンポーネントを実装しています。ページを完全にリフレッシュした後、このコンポーネントを表示する(ブランクにロードする)必要があります。別のページに移動し、データが正常に読み込まれます。私たちが間違っていることに誰かが光を当てることはできますか?サービスから呼び出されたときにコンポーネントが最初のビューにロードされない
はここでコンポーネント
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);
}
}
ここでは、サービスの実装
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>
あるNgModule
構成は
@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()」を追加しないでください。 jsonを '.map()'に戻してください – RRForUI