我的sapper应用程序围绕着表组件。该表组件具有要在URL的查询字符串中表示的状态(偏移量,限制,排序,过滤器等)。
该表当前可以通过直接更新其状态来正常工作
<button on:click="{() => offset += limit}" disabled="{offset + rows.length >= count}">»</button>
我看到有一个页面只读存储,它可以使我访问查询字符串的当前值。我想我可以使用类似URLSearchParams
之类的东西来生成具有相关值更新的链接。
是否有更好的方法来处理此问题(将变量直接绑定到查询字符串的某种方法)?如果没有,用更新的查询字符串生成链接的最佳方法是什么?
编辑:
我当前的解决方案是以下功能:
const getLink = queryStringDiff => {
const query = $page.query;
const path = $page.path;
const str = Object.entries({...query, ...queryStringDiff}).reduce(
(acc, cur) => `${acc}&${cur[0]}=${cur[1]}`, ''
).replace('&', '?');
return `${path}${str}`;
}
我在一个a
标记中引用了以下按钮:
href="{getLink({'offset': (offset - limit)})}"
它有效,但是我觉得应该有更好的方法
答案 0 :(得分:1)
您可以从page
存储访问查询字符串状态:
<script>
import { stores } from '@sapper/app';
const { page } = stores();
$: start = $page.query.p * $page.query.itemsPerPage;
$: end = start + $page.query.itemsPerPage;
$: slice = myData.slice(start, end); // plus filtering, sorting etc
</script>
<table>
<thead>...</thead>
<tbody>
{#each slice as row}
<tr>...</tr>
{/each}
</tbody>
</table>
<a href="my-table?p={$page.query.p + 1}">next</a>
如果需要以编程方式导航,则可以使用goto
:
<script>
import { stores, goto } from '@sapper/app';
// ...
const next = () => {
goto(`my-table?p=${$page.query.p + 1}`);
};
</script>