It's already late, but I hope this can help someone else, as I also struggled with this.
So, another reason this can happen is because the navigation event is fired twice.
This happened to me by mistake, because I had a component with the routerLink directive that had an input binding with the same name:
My-component class:
@Input() routerLink: string[];
My component template:
... <a [routerLink]="routerLink"> ...
The parent component template was like this:
... <my-component [routerLink]="somePath" ... >
Which actually created another routerLink directive. As a result, the navigation event fired twice, almost simultaneously, which led to the NavigationCancel event.
source share