Я получил решение, когда мы нажимаем на ссылку роутера, мы можем проверить свойство navigStart роутера и узнать, является ли триггер навигации императивным или popstate или hashChange . В случае popstate - он напрямую попадает из браузера. В случае императив - попадание происходит изнутри самого приложения. Таким образом, я могу поместить guard (canActivate ()) в ссылку на маршрутизатор, чтобы проверить, какой это триггер, и контролировать поведение URL.
Примечание: - триггер hashChange Я не очень осведомлен о том, как это происходит. (Если кто-то знает, внесите свой вклад)