Хорошие стандарты кодирования требуют разделения ответственности. Это определенно требует обслуживания, чтобы обработать получение и установку данных. Компоненты должны быть тупыми и должны принимать данные только из службы, ввода или системы управления состоянием.
Помимо этих стандартов, есть два других способа, которыми вы можете просто использовать строку запроса, и иметь это красиво. Используйте методы JSON.stringify
и JSON.parse
для получения и установки queryParams.
<a routerLink="feature/subview" [queryParams]="getQueryParams(item)">
Click me for {{item.name}}
</a>
getQueryParams(item): any {
return { query: JSON.stringify({
origin: ...,
data:item
}) };
}
Затем вы можете получить этот запрос в другом компоненте:
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
// ignoring possible obvious undefined errors
const item = JSON.parse(this.route.snapshot.params.query).query;
}
Другим способом может быть использование toString()
метода:
<a routerLink="feature/subview" [queryParams]="getQueryParams(item)">
Click me for {{item.name}}
</a>
getQueryParams(item): any {
return {
origin: ...,
data: item,
toString() {
return JSON.stringify(this)
}
};
}
Я считаю, что вам больше не нужно использовать JSON.parse
для своего снимка, но я могу ошибаться
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
const { origin, data } = this.route.snapshot.params;
}