#angular #typescript
#angular #typescript
Вопрос:
У меня есть этот маршрут с параметром запроса lang
:
http://localhost:4200/?lang=de
Ни один из следующих примеров не работает, он всегда равен null или undefined
import { ActivatedRoute } from '@angular/router';
constructor(private route: ActivatedRoute) {
console.log(this.route.snapshot.params.lang);
console.log(this.route.snapshot.queryParamMap.get('lang'));
}
ngOnInit(): void {
this.route.queryParams.subscribe(params => {
let lang = params['lang'];
console.log(lang);
});
console.log(this.route.snapshot.queryParamMap.get('lang'));
console.log(this.route.snapshot.params.lang);
}
Что я делаю не так? Сейчас я прочитал несколько руководств, даже некоторые для angular 10. Каждый из них показывает приведенные выше примеры, но я все еще не могу получить значение lang
.
Комментарии:
1. Какая у вас версия angular?
2. Вы пробовали проверять значение de, прежде чем передавать его в качестве параметра
3. можете ли вы попробовать это this.route.snapshot.paramMap.get(‘lang’);
Ответ №1:
Вот мое рабочее решение:
var url = new URL(window.location.href);
var lang = url.searchParams.get("lang");
Это работает в ngInit и в конструкторе.
Комментарии:
1. Это также работает в app.component без маршрутизатора-розетки!
2. Это решение неверно для SSR.
Ответ №2:
Для механизма Observable вы можете использовать paramMap observable, подобный этому, с неопределенной проверкой.
this.route.paramMap.subscribe(params => {
if(params.get('lang')){
let lang = params.get('lang');
console.log(lang);
}
});
И другие решения, которые уже предложил @Leo.
Спасибо.
Комментарии:
1. Вы знаете, можно ли использовать этот метод без использования текущего маршрута? Например:
this.router.parseUrl('https://myapiendpoint.com?page=2');
Ответ №3:
Комментарии:
1. Вы пробовали это в constructor или ngOnInit?
2. Я пробовал в конструкторе in, но нашел другое решение, смотрите Мой ответ
3. Хорошо, рад, что вы нашли свой ответ. Я бы все равно попробовал свой ответ в
ngOnInit
, хотя, поскольку это скорее «угловой способ».
Ответ №4:
constructor(private route: ActivatedRoute,
private router: Router) {
this.route.queryParamMap.pipe(
filter(queryParamMap => queryParamMap.has('lang'))
).subscribe(queryParamMap => {
const lang = queryParamMap.get('lang');
console.log(lang);
});
this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
switchMapTo(this.route.queryParamMap)
).subscribe(queryParamMap => {
const lang = queryParamMap.get('lang');
console.log(lang);
});
}