Slim.js предоставляет компактный и эффективный способ управления состоянием компонентов и маршрутизацией, включая работу с query-параметрами URL. Query-параметры позволяют передавать данные в адресной строке без изменения маршрута, что делает их удобным инструментом для фильтров, пагинации и динамического контента.
Для доступа к query-параметрам используется объект
Slim.Route.query. Этот объект автоматически
синхронизируется с текущим URL и обновляется при изменении адресной
строки.
Пример базового использования:
class ProductList extends Slim {
constructor() {
super();
this.filter = '';
}
onBeforeMount() {
// Получение параметра filter из URL
this.filter = Slim.Route.query.filter || '';
}
render() {
return `
<div>
<input type="text" value="${this.filter}" placeholder="Фильтр" />
</div>
`;
}
}
customElements.define('product-list', ProductList);
Ключевые моменты:
Slim.Route.query возвращает объект с ключами,
соответствующими именам параметров в URL.undefined.onBeforeMount, что гарантирует корректную инициализацию
данных перед рендером.Изменение query-параметров выполняется через метод
Slim.Route.setQuery(). Этот метод позволяет программно
изменять параметры, не перезагружая страницу.
Slim.Route.setQuery({ filter: 'laptop', page: 2 });
После вызова:
?filter=laptop&page=2.Slim.Route.query.Если нужно удалить параметр, его можно установить в
null:
Slim.Route.setQuery({ filter: null });
Это удаляет filter из строки запроса, сохраняя остальные
параметры.
Slim.js поддерживает реактивное отслеживание изменений
query-параметров. Для этого можно использовать событие
queryChange на объекте Slim.Route:
Slim.Route.addEventListener('queryChange', (event) => {
console.log('Query изменился:', Slim.Route.query);
});
Особенности:
Использование query-параметров для фильтрации списка товаров:
class ProductFilter extends Slim {
constructor() {
super();
this.category = Slim.Route.query.category || '';
}
onInputChange(event) {
const value = event.target.value;
Slim.Route.setQuery({ category: value || null });
this.category = value;
}
render() {
return `
<input type="text" value="${this.category}"
placeholder="Категория"
onin put="this.parentElement.onInputChange(event)" />
<product-list category="${this.category}"></product-list>
`;
}
}
customElements.define('product-filter', ProductFilter);
category.product-list.Slim.js автоматически кодирует значения параметров для корректного использования в URL. Можно устанавливать несколько параметров одновременно:
Slim.Route.setQuery({ search: 'phone', sort: 'price', page: 3 });
?search=phone&sort=price&page=3.Методы Slim.Route используют API
history.pushState и history.replaceState, что
позволяет:
onBeforeMount.Slim.Route.setQuery для реактивного обновления URL.null.queryChange для динамических компонентов.Query-параметры в Slim.js позволяют строить динамичные, реактивные интерфейсы с минимальными усилиями и без лишней нагрузки на маршрутизатор. Они идеально подходят для фильтров, пагинации, поиска и управления состоянием компонентов через URL.