Obwohl es wie eine gemeinsame Situation scheint, habe ich keine anständige Lösung gefunden, wie ich eine Daten von den Eltern zu Kindern Routen teilen.Teilen Sie Daten für Kinder Routen
Routen:
{
path: ':id',
component: DetailComponent,
children: [
{ path: 'overview', component: OverviewComponent },
{ path: 'profile', component: ProfileComponent }
]
}
Service:
@Injectable()
export class Service {
constructor(private http: Http) { }
getModel(id: number): Observable<Profile> {
// ajax request to the server using Http service
// returns Profile model
}
}
DetailComponent (Eltern):
@Component({
moduleId: module.id,
templateUrl: 'detail.component.html'
})
export class DetailComponent implements OnInit, OnDestroy {
model: any = {}; // how do I share this with children components avoiding another ajax request?
private paramSub: any;
private modelId: number;
constructor(
private activeRoute: ActivatedRoute,
private service: Service) { }
ngOnInit(): void {
this.paramSub = this.activeRoute.params.subscribe(params => {
this.modelId = +params['id'];
this.service.getModel(this.modelId).subscribe(model => this.model = model);
});
}
ngOnDestroy(): void {
this.paramSub.unsubscribe();
}
}
OverviewComponent (Kind):
@Component({
moduleId: module.id,
templateUrl: 'overview.component.html'
})
export class OverviewComponent implements OnInit, OnDestroy {
model: any = {};
private paramSub: any;
private modelId: number;
constructor(
private activeRoute: ActivatedRoute,
private service: Service) { }
ngOnInit(): void {
this.paramSub = this.activeRoute.parent.params.subscribe(params => {
this.modelId = +params['id'];
// another request to the server which I need to prevent
this.service.getModel(this.modelId).subscribe(model => this.model = model);
});
}
ngOnDestroy(): void {
this.paramSub.unsubscribe();
}
}
Wie Sie die übergeordnete Komponente erhält ein gemeinsamen Daten sehen können, die zu den Kindern Routen geleitet werden muss. Wenn möglich, diese Daten im Service zwischenzuspeichern, kann jemand einen geeigneten Weg empfehlen, dies zu erreichen und den Cache ungültig zu machen? Wenn das alles nicht gut ist, schlagen Sie bitte den richtigen Weg vor.
eckig: 2.0.0-rc.6; Router: 3.0.0-rc.2
Normalerweise wird ein Shared-Service ist der beste Ansatz für diese Situation https://angular.io/docs/ts/latest/cookbook/component-communication.html#! # bidirectional-service –
Mögliches Duplikat von [Caching-Ergebnisse mit angular2 http-Service] (http://stackoverflow.com/questions/34104277/caching-results-with-angular2-http-service) – tibbus
Dies ist der richtige Weg, um eine Service, so möchten Sie vielleicht sehen, wie die HTTP-Anfrage im Cache: http://StackOverflow.com/Questions/34104277/Caching-results-with-angular2-http-Service – tibbus