Я создаю приложение angular 4. Бывает, что мне нужно получить параметры из моего URL-адреса, которые находятся на разных уровнях глубины, что приводит к тому, что способ получения моих параметров неодинаков.
Предположим, у нас есть этот URL:
https://mysite/companies/:companyID/cups/:cupId/drawings/:drawId
Обычно, согласно документам angular, нам нужно было бы сделать что-то вроде:
ngOnInit() {
this.activatedRoute.parent.parent.params.subscribe((params: Params) =>
{this.companyId = params['companyId'];
});
this.activatedRoute.parent.params.subscribe((params: Params) =>
{this.cupId = params['cupId'];
});
this.activatedRoute.params.subscribe((params: Params) =>
{this.drawId = params['drawId'];
});
}
Обратите внимание, что это с учетом того, что мы находимся внутри DrawDetailComponent, что означает, что мы находимся в компоненте, который является последним дочерним элементом в этой иерархии.
Также обратите внимание, что в зависимости от того, насколько глубоко вы находитесь в этой иерархии, вам нужно будет добавить | вычесть .parent к вашему активированному маршруту, чтобы оказаться в правильном положении, где вы можете успешно получить параметры, которые вы ищете.
Итак, возможно ли получить все параметры из ваших URL-адресов с одним и тем же вызовом?
Что-то типа:
this.activatedRoute.parent.parent.params.subscribe((params: Params) =>
{this.companyId = params['companyId'];
{this.cupId = params['cupId'];
{this.drawId = params['drawId'];
});
Мы хотели бы иметь единый, не зависящий от глубины способ получения всех параметров из нашего URL.
На самом деле мы также пробовали что-то вроде:
const property = 'companyId';
this.activatedRoute.pathFromRoot.forEach((item) => {
if (item.snapshot.params.hasOwnProperty(property)) {
item.params.subscribe((params: ParamMap) => {
this.companyId = params[property];
});
}
});
Но мы надеемся найти лучший, более общий и проверяемый способ.
Обычно в таких средах, как Django, разработчик может собрать всю необходимую информацию из URL-адреса за один шаг. Это нормально иметь подписки для автоматической обработки изменений этих параметров в случае Angular, но ИМХО это далеко не удобно и не тестируемо.
data
, собственные параметры и общих провайдеров. Вероятно, у вас есть проблема XY с дизайном приложения, которую предполагается решить другим способом. - person Estus Flask   schedule 26.07.2017