diff --git a/src/app/app.config.ts b/src/app/app.config.ts index a2ca06d..6bbade3 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -1,14 +1,16 @@ import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core'; -import { provideRouter } from '@angular/router'; +import {provideRouter, RouteReuseStrategy} from '@angular/router'; import { routes } from './app.routes'; import {provideHttpClient} from '@angular/common/http'; +import {CustomRouteReuseStrategy} from './route-reuse.strategy'; export const appConfig: ApplicationConfig = { providers: [ provideBrowserGlobalErrorListeners(), provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), - provideHttpClient() + provideHttpClient(), + { provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy } ] }; diff --git a/src/app/produktbaum/produktbaum.html b/src/app/produktbaum/produktbaum.html index 824e94d..293f0de 100644 --- a/src/app/produktbaum/produktbaum.html +++ b/src/app/produktbaum/produktbaum.html @@ -54,9 +54,9 @@ {{meldung.errorMsg}} -
+
Mit dem Baustein assoziiertes Risikoobjekt -
+
diff --git a/src/app/produktbaum/produktbaum.ts b/src/app/produktbaum/produktbaum.ts index ea46ebe..e60533f 100644 --- a/src/app/produktbaum/produktbaum.ts +++ b/src/app/produktbaum/produktbaum.ts @@ -85,8 +85,8 @@ interface Plausi { }) @Injectable({providedIn: 'root'}) export class Produktbaum { - private risikoobjektService = inject(RisikoobjektService); - risikoobjekte = this.risikoobjektService.risikoobjekte(); + protected risikoobjektService = inject(RisikoobjektService); + risikoobjekte = this.risikoobjektService.risikoobjekte; protected readonly title = signal('OMDSAngularWebClient'); @@ -361,7 +361,7 @@ export class Produktbaum { for (const v of values) { const value = this.extractValue(v); - const ro = this.risikoobjekte.find( + const ro = this.risikoobjektService.risikoobjekte().find( r => r.id === value.substring(24) ); @@ -668,7 +668,7 @@ export class Produktbaum { const fahrzeug = this.buildFahrzeug(p); let fahrzeugAlt = - this.risikoobjekte.find(r => + this.risikoobjektService.risikoobjekte().find(r => r.handelsbezeichnung === fahrzeug.handelsbezeichnung && new Date(r.erstzulassung).getTime() === fahrzeug.erstzulassung.getTime()) @@ -678,7 +678,7 @@ export class Produktbaum { fahrzeugAlt.baujahr = fahrzeug.baujahr; } else { console.log("neues fahrzeug") - this.risikoobjekte.push(fahrzeug); + this.risikoobjektService.addRisikoobjekt(fahrzeug); } } }) diff --git a/src/app/route-reuse.strategy.ts b/src/app/route-reuse.strategy.ts new file mode 100644 index 0000000..0e4a3ae --- /dev/null +++ b/src/app/route-reuse.strategy.ts @@ -0,0 +1,31 @@ +import { RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router'; + +export class CustomRouteReuseStrategy implements RouteReuseStrategy { + private handlers: { [key: string]: DetachedRouteHandle } = {}; + + // Soll die Route gespeichert werden? + shouldDetach(route: ActivatedRouteSnapshot): boolean { + // Hier kannst du filtern, welche Route gespeichert werden soll (z.B. 'produktbaum') + return route.routeConfig?.path === 'produktbaum'; + } + + // Speichert die Komponente + store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void { + this.handlers[route.routeConfig?.path!] = handle; + } + + // Soll eine gespeicherte Route wiederhergestellt werden? + shouldAttach(route: ActivatedRouteSnapshot): boolean { + return !!this.handlers[route.routeConfig?.path!]; + } + + // Holt die gespeicherte Komponente zurück + retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { + return this.handlers[route.routeConfig?.path!]; + } + + // Soll die Route beim Navigieren wiederverwendet werden? + shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean { + return future.routeConfig === curr.routeConfig; + } +}