ActivatedRoute Поля являются наблюдаемыми. Например, мы хотим получить параметр id или только n-й сегмент URL. Вместо простых карт или массивов мы используем Observables. Это чрезмерное использование асинхронности или действительно необходимо для какой-либо цели?Почему Angular 2 использует Observables вместо простых массивов в маршрутизации?
ответ
Вы можете получить текущую версию параметра с использованием snapshot
field of the ActivatedRoute.
Но по умолчанию маршрутизатор повторно использует тот же компонент, если вы перемещаетесь от маршрута к тому же маршруту, только изменяя параметры. Поэтому вам нужно Observable, чтобы иметь возможность реагировать на изменения значений параметров внутри этого компонента.
Предположим, например, что у вас есть список упражнений для отображения. Когда вы нажмете упражнение, перейдите к /exercises/1
. Внутри шаблона компонента, отображающего упражнение, у вас есть ссылка «Далее» на /exercises/2
. При нажатии на эту ссылку значение params
Observable испускает новое значение. Но маршрутизатор не создаст новый экземпляр ActivatedRoute и не создаст новый экземпляр ExerciseComponent. ExerciseComponent должен подписаться на наблюдаемые параметры, чтобы загрузить детали упражнения 2 при испускании события.
Если у вас нет такой ссылки, то моментальный снимок вам нужен, и он содержит параметры как обычный объект.