Я использую angular2.0.0-beta.7. Когда компонент загружается по пути, на который /path?query=value1
он перенаправлен /path
. Почему были удалены параметры GET? Как я могу сохранить параметры?
У меня ошибка в роутерах. Если у меня есть основной маршрут, как
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
и мой ребенок маршрут как
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
тогда я не могу получить параметры в TodoListComponent. Я могу получить
params("/my/path;param1=value1;param2=value2")
но я хочу классику
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
источник
источник
@RouteConfig
для этогоpath
?Ответы:
Инъекцией экземпляра
ActivatedRoute
можно подписаться на различные наблюдаемые, включая aqueryParams
иparams
observable:ПРИМЕЧАНИЕ по поводу неподписки
@Reto и @ codef0rmer совершенно справедливо отметили, что, согласно официальным документам, метод
unsubscribe()
внутренних компонентовonDestroy()
в этом случае не нужен. Это было удалено из моего примера кода. (см. синее окно предупреждения в этом уроке)источник
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Когда URL-адрес, как этот http://stackoverflow.com?param1=value
Вы можете получить param1 по коду:
источник
Несмотря на то, что в вопросе указана бета- версия 7 , этот вопрос также является лучшим результатом поиска в Google по общим фразам, таким как угловые 2 параметра запроса . По этой причине вот ответ для самого нового маршрутизатора (в настоящее время в альфа.7 ).
Способ чтения параметров сильно изменился. Сначала вам нужно ввести зависимость, вызываемую
Router
в параметрах вашего конструктора, например:и после этого мы можем подписаться на параметры запроса в нашем
ngOnInit
методе (конструктор тоже в порядке, ноngOnInit
должен использоваться для тестируемости), какВ этом примере мы читаем идентификатор параметра запроса из URL, например
example.com?id=41
.Есть еще несколько вещей, на которые стоит обратить внимание:
params
likeparams['id']
всегда возвращает строку , и ее можно преобразовать в число , поставив перед ним префикс+
.источник
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.Мне очень понравился ответ @ StevePaul, но мы можем сделать то же самое без постороннего вызова подписки / отмены подписки.
источник
Для отправки параметров запроса
Чтобы получить параметры запроса
Официальный источник
источник
Здравствуйте, вы можете использовать URLSearchParams, вы можете прочитать больше об этом здесь .
Импортировать:
и функция:
Примечание : он поддерживается не всеми платформами и, похоже, находится в состоянии «ЭКСПЕРИМЕНТАЛЬНО» по угловым документам
источник
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
Прежде всего, я нашел работу с Angular2, что URL со строкой запроса будет/path;query=value1
Чтобы получить к нему доступ в компоненте, который вы используете, тоже самое, но теперь следует блок кода:
Что касается того, почему он будет удален при загрузке компонента, это не поведение по умолчанию. Я проверил конкретно в чистом тестовом проекте и не был перенаправлен или изменен. Это маршрут по умолчанию или что-то особенное в маршрутизации?
Прочтите о маршрутизации со строками и параметрами запросов в учебном руководстве по Angular2 по адресу https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters.
источник
Вы можете получить параметры запроса при передаче в URL, используя ActivatedRoute, как указано ниже: -
URL: - http: /domain.com? test = abc
источник
Получить URL-параметр как объект.
источник
Если вы хотите получить параметр запроса только один раз, лучше всего использовать метод take, чтобы вам не приходилось беспокоиться об отмене подписки. Вот простой фрагмент: -
Примечание: удалите take (1), если вы хотите использовать значения параметров в будущем.
источник
Теперь это:
источник
Я надеюсь, что это поможет кому-то еще.
В приведенном выше вопросе указывается, что значение параметра запроса необходимо после перенаправления страницы, и мы можем предположить, что значения моментального снимка (ненаблюдаемая альтернатива) будет достаточно.
Никто здесь не упомянул о snapshot.paramMap.get из официальной документации .
Поэтому перед отправкой добавьте это в компонент отправки / перенаправления:
затем перенаправьте как либо (задокументировано здесь ):
или просто:
Убедитесь, что вы добавили это в свой модуль маршрутизации, как описано здесь :
И, наконец, в вашем компоненте, который должен использовать параметр запроса
добавить импорт (задокументировано здесь ):
ввести ActivatedRoute
(документация также импортирует switchMap, а также внедряет Router и HeroService - но они нужны только для наблюдаемой альтернативы - они НЕ нужны, когда вы используете альтернативный снимок, как в нашем случае):
и получите нужное вам значение (задокументировано здесь ):
ПРИМЕЧАНИЕ. ЕСЛИ ВЫ ДОБАВЛЯЕТЕ МОДУЛЬ МАРШРУТИЗАЦИИ В МОДУЛЬ ОСОБЕННОСТИ (КАК ПОКАЗАНО В ДОКУМЕНТАЦИИ), УБЕДИТЕСЬ, ЧТО В APP.MODULE.ts ЭТО МОДУЛЬ МАРШРУТА ПРОХОДИТ ПЕРЕД AppRoutingModule (или другим файлом с маршрутами приложения корневого уровня) В ИМПОРТАХ: []. ПРОЧИЕ МАРШРУТЫ ОСОБЕННОСТИ НЕ НАЙДЕНЫ (ПОЭТОМУ ОНИ БУДУТ ПОСЛЕ {path: '**', redirectTo: '/ not-found'}, и вы увидите только не найденное сообщение).
источник
Вам просто нужно вставить ActivatedRoute в конструктор, а затем просто получить доступ к params или queryParams через него
В некоторых случаях он ничего не дает в NgOnInit ... возможно, из-за вызова init перед инициализацией параметров, в этом случае вы можете добиться этого, попросив наблюдаемое подождать некоторое время с помощью функции debounceTime (1000)
например =>
debounceTime () Испускает значение из источника, наблюдаемого только после того, как определенный промежуток времени прошел без другого источника излучения
источник
Вы не можете получить параметр из RouterState, если он не определен в маршруте, поэтому в вашем примере вы должны проанализировать строку запроса ...
Вот код, который я использовал:
источник
Запрос и путь (Angular 8)
Если у вас есть URL, например https://myapp.com/owner/123/show?height=23, используйте
ОБНОВИТЬ
В случае, если вы используете
this.router.navigate([yourUrl]);
и параметры вашего запроса встроены вyourUrl
строку, то angular кодирует URL, и вы получаете что-то вроде этого https://myapp.com/owner/123/show%3Fheight%323 - и выше решение даст неправильный результат ( queryParams будет пустым, и параметры запроса могут быть приклеены к последнему параметру пути, если он находится в конце пути). В этом случае измените способ навигации на этотисточник