Просто наткнулся на ту же проблему, и большинство ответов здесь, кажется, решают ее только для внутренней угловой маршрутизации, а затем некоторые из них для параметров маршрута, которые не совпадают с параметрами запроса.
Я предполагаю, что у меня есть вариант использования, аналогичный исходному вопросу Ларса.
Для меня вариант использования, например, отслеживание рефералов:
Angular работает mycoolpage.com
, с хеш-маршрутизацией, поэтому mycoolpage.com
перенаправляет на mycoolpage.com/#/
. Однако для реферальной ссылки такая ссылка также mycoolpage.com?referrer=foo
должна быть пригодной для использования. К сожалению, Angular немедленно удаляет параметры запроса, переходя непосредственно к mycoolpage.com/#/
.
Любой трюк с использованием пустого компонента + AuthGuard и получением queryParams
илиqueryParamMap
, к сожалению, не работает для меня. Они всегда были пустыми.
Мое хакерское решение в конечном итоге заключалось в том, чтобы обрабатывать это в небольшом скрипте, в index.html
котором можно получить полный URL с параметрами запроса. Затем я получаю значение параметра запроса с помощью строковых манипуляций и устанавливаю его в объекте окна. Затем отдельный сервис обрабатывает получение идентификатора из объекта окна.
скрипт index.html
const paramIndex = window.location.href.indexOf('referrer=');
if (!window.myRef && paramIndex > 0) {
let param = window.location.href.substring(paramIndex);
param = param.split('&')[0];
param = param.substr(param.indexOf('=')+1);
window.myRef = param;
}
обслуживание
declare var window: any;
@Injectable()
export class ReferrerService {
getReferrerId() {
if (window.myRef) {
return window.myRef;
}
return null;
}
}