Внутри Angular есть небольшая и хорошо спрятанная служба: служба определения местоположения. Как следует из названия и документации, это класс, который используется для взаимодействия с URL-адресом браузера.

Я видел, как люди использовали это, вероятно, по ошибке, пытаясь перемещаться внутри приложения, это не работает, потому что это вообще не связано с маршрутизатором. Мы можем использовать его для обновления / изменения адреса браузера, в основном взаимодействуя с URL-адресом вне маршрутизации.

Пример использования

Хорошее место, которое я нашел для этого, - это обновить текущее местоположение после того, как мы завершим операцию, которая обычно меняет его, но мы не хотим задействовать маршрутизатор (например, чтобы избежать каких-либо побочных эффектов и навигации триггеры, генерируемые перезагрузкой страницы).

Допустим, у нас есть маршрут, который ведет к деталям элемента, что-то вроде: 'item / {itemId}' и очень похожий маршрут, который используется для создания нового элемента. : 'элемент / новый'.

Когда мы создаем новый элемент, мы переходим к последнему, а адрес браузера устанавливается на item / new. После того, как мы добавим все детали, когда мы отправим это в API, мы вернем сохраненный объект из базы данных, включая идентификатор элемента.

Поскольку элемент был сохранен, мы больше не находимся в новом состоянии, мы находимся в режиме редактирования и хотим показать это в URL-адресе, изменив новый на значение id.

Мы могли бы перезагрузить страницу, но, скорее всего, это приведет к повторной загрузке элемента из API. И это в самом простом сценарии, в более сложных мы можем иметь несколько эффектов, которые срабатывают при загрузке страницы, и мы хотим избежать всего этого лишнего.

Решение

Здесь на помощь приходит служба определения местоположения. Мы можем использовать метод go, чтобы обновить адрес и добавить его в историю, убедившись, что если мы перейдем на другой маршрут и нажмем кнопку Назад, то в итоге получим элемент. id в адресной строке, а не с новым.

Использовать метод так же просто, как вызвать его со строковым аргументом, представляющим новый адрес:

Код

Пример и очень маленькое приложение, демонстрирующее это, можно найти на StackBlitz. Если вы хотите отредактировать образец, вы можете воспользоваться этой ссылкой.

Какие еще варианты использования Службы определения местоположения вы нашли?