When using this code in HTML:
<button [routerLink]="[{ outlets: { flow: ['step1'] } }]">click me to show step1</button>
it navigates correctly to '/child/(flow:step1)'!!!
When trying to use this code in Typescript:
this.router.navigate([{ outlets: { flow: ['step1'] } }]);
it trying to navigate to wrong path '/child(flow:step1)'!!!
It just missing the slash.
Service:
import { Injectable } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { EventBusService } from '../../../services/eventBus/eventBus.service';
import { RouterService } from '../../../services/router.service';
@Injectable()
export class FlowManagerService {
constructor(private router: Router, private r: ActivatedRoute, private eventBus: EventBusService, private routerService: RouterService) {
}
initValidStep() {
return (parseInt(this.routerService.currentUrlName.substr(this.routerService.currentUrlName.indexOf('step'), 5).replace('step', ''), 10) === 1);
}
goToFirstStep() {
this.router.navigate([{ outlets: { flow: ['step1'] } }], {relativeTo: this.r});
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_NEXT);
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_BACK);
}
next(params) {
const currentStep = this.routerService.currentUrlName.substr(this.routerService.currentUrlName.indexOf('step'), 5).replace('step', '');
this.eventBus.emit(this.eventBus.globalEvents.FLOW.FLOW_STEP_CHANGE, ({
type: 'NEXT'
}));
this.router.navigate([{ outlets: { flow: [`step${parseInt(currentStep, 10) + 1}`, params] } }], {relativeTo: this.r});
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_NEXT);
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_BACK);
}
back(params) {
const currentStep = this.routerService.currentUrlName.substr(this.routerService.currentUrlName.indexOf('step'), 5).replace('step', '');
this.eventBus.emit(this.eventBus.globalEvents.FLOW.FLOW_STEP_CHANGE, ({
type: 'NEXT'
}));
this.router.navigate([{ outlets: { flow: [`step${parseInt(currentStep, 10) - 1}`, params] } }], {relativeTo: this.r});
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_NEXT);
this.eventBus.off(this.eventBus.globalEvents.FLOW.FLOW_STEP_BACK);
}
}
Here is the Module using the Service above:
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { FlowManagerService } from './service/flowManager.service';
import { CommonModule } from '@angular/common';
@NgModule({
providers: [FlowManagerService],
imports: [
RouterModule,
CommonModule
]
})
export class FlowManagerModule {
}