There is some fundamental concept of routing in Angular 4 that I don't understand.
index.html:
<base href="/">
File structure:
- app
|- app.routings.ts
|- collections
|-- collection.component.ts
|-- collection.component.html
|-- collectioninfo.component.ts
|-- collectioninfo.component.html
|- shared
|-- header.component.html
|-- header.component.ts
I have a link in my header.component.html:
<a class="nav-link" [routerLink]="['/collections']">
Collections
</a>
If I click it I land on localhost:4200/collections. When a button is clicked, the url is programmatically changed (in collection.component.ts):
this.router.navigate(['/collections/', collection.name]);
I end up on localhost:4200/collections/name - all fine. Now I programatically want to get back to /collections (in collectioninfo.component.ts):
this.router.navigate(['/collections']);
But that doesn't work. The url doesn't change and I get an error that says a parameter couldn't be loaded - so apparently /collections/name is being loaded again. Thought it might is a path issue, but things like this also don't work:
this.router.navigate(['../collections']);
Additional info: When I manually reload the page while being on /collections I'm being forwarded to the home page again, but I think that is another issue and not related to this behaviour.
app.routing.ts:
const APP_ROUTES: Routes = [
...
{ path: 'collections', component: CollectionComponent },
{ path: 'collections/:id', component: CollectionInfo },
];
navigateByUrl
instead ofnavigate
, I don't know if it will fix your issue, but I use that for my programmatic page changes – Incisive/collections
is falling through to theCollectionsInfo
route. Alternatively, use an exact match for the route. – Postaxialthis.router.navigateByUrl('/collections');
– IncisivepathMatch: 'full'
– Postaxialnavigate
the first part is always relative to the base if you use it likenavigate(['/collections'])
, so nothing wrong with that. Guess your components don't try to redirect onInit or something like that? – Influentialrouter.navigate
in your ngOnInit but maybe you have a Guard somewhere that intervenes with your routing? I dont know, that's why i wanted to see more of your code :) – Influential