Routenwächter ändert sich bei der Erweiterung von Routen
Sterling Store Engagement verwendet die Angular Route Guards, um die Navigation zu bestimmten Routen zu steuern, die auf Bedingungen basieren. Wenn Sie also Routen erweitern, werden bestimmte Änderungen am Routenwächter vorgenommen.
Der ValidatePackOrderGuard Angular Route Guard, der in der store-single-spa/packages/features/pack-order/src/app/features/pack-order/pack-order-page/validate-pack-order.guard.ts Datei vorhanden ist, wird beispielsweise verwendet, um zu überprüfen, ob eine Sendung einen gültigen Status hat, bevor Sie auf die Pack products Seite wechseln. Wenn sich die Sendung nicht im gültigen Status befindet, wird die Seite Pack products nicht angezeigt.
Die Angular-Route-Guards müssen geändert werden, wenn Sie eine Route erweitern, die durch den Routing Guard geschützt ist. Wenn Sie z. B. das PackOrderPageComponent im Paketfluss erweitern, ändern Sie den ValidatePackOrderGuard angular route guard.
ValidatePackOrderGuard angular route guard zu ändern, führen Sie die folgenden Schritte aus:- Fügen Sie in der von der Route verwendeten Datendienstdatei den Betreff routingInProgress$ hinzu. In diesem Fall ist
PackOrderPageDataServiceder Datendienst.import { Subject } from 'rxjs'; public routingInProgress$: Subject<boolean> = new Subject<boolean>(); - Fügen Sie die Variable routingInProgress wie folgt in den Route Guard ein:
public routingInProgress = false; - Fügen Sie den Code in die Methode
canActivateinnerhalb des Blocksif(!this.routingInProgress)ein. - Setzen Sie das
routingInProgress)auf true. - Setzen Sie im Handler für das Versprechen
routingInProgressauf false zurück und geben SieroutingInProgress$.next(false)aus. - Fügen Sie die Anweisung
this._location.back();in den else-Block ein, wie im folgenden Codeschnipsel dargestellt. Sie finden die Änderungen im//Extension changes - start //und//Extension changes - end //Kommentar./******************************************************************************* * IBM Confidential * IBM Sterling Order Management (5737-D18) * IBM Sterling Order Management Software (5725-D10) * (C) Copyright IBM Corp. 2022 ******************************************************************************/ import { Location } from '@angular/common'; import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, UrlTree } from '@angular/router'; import { routePath, UIUtil } from '@store/core'; import { PackOrderPageDataService } from './pack-order-page-data.service'; @Injectable() export class ValidatePackOrderGuard implements CanActivate { private shipmentId = ''; // Extension changes - start // public routingInProgress = false; // Extension changes - end // constructor( private packOrderDataService: PackOrderPageDataService, private router: Router, private _location: Location ) { } canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> | boolean | UrlTree { this.shipmentId = next.params['ShipmentNo']; //Extension changes - start // if(!this.routingInProgress){ this.routingInProgress = true; this.packOrderDataService.routingInProgress$.next(true); //Extension changes - end // return this.packOrderDataService.validatePackReqBeforePack(this.shipmentId) .then( validationStatus => { let validationState = validationStatus['Shipment'] && !validationStatus['Shipment'].Error ? 'continueToPack' : validationStatus; //Extension changes - start // this.routingInProgress = false; this.packOrderDataService.routingInProgress$.next(false); //Extension changes - end // if (validationState === 'continueToPack') { return true; } else if (validationStatus['Shipment'] && validationStatus['Shipment'].Error && validationStatus['Shipment'].Error.ErrorDescription) { const navigationURL = routePath(`shipment/summary/${this.shipmentId}`, 'shell'); const queryParams = { errorMsg: validationStatus['Shipment']?.Error?.ErrorDescription }; if (this.router.url === '/') { history.replaceState('', '', '/' + navigationURL + UIUtil.jsonToQueryString(queryParams)); } return this.router.createUrlTree([navigationURL], { queryParams: queryParams }); } else { if (this.router.url === '/') { this._location.back(); return true; } else { //Extension changes - start // this._location.back(); //Extension changes - end // return false; } } } ); } } } - Abonnieren Sie
routingInProgress$in der Methode der RoutenkomponentengOnInit. Zum Beispiel, innerhalb vonPackOrderPageComponentthis.dataService.routingInProgress$.subscribe(routingInProgress => { if(!routingInProgress){ this.packAllPermission = ResourcePermissionUtil.hasPermission(this.PACKALL_RESOURCE_PERMISSION); this.showItemImage = RulesUtil.isRuleEnabled('WSC_SHOW_ITEM_IMAGES'); this.shipmentKey = this.activeRoute.snapshot.params['ShipmentNo']; this.getInitializationDataForShipment(true); } });