第一个,store的subscribe(订阅)功能失灵
在开发页签(tab)功能时,我尝试了五六天,查阅了很多外部文档,依然无法解决关闭最后一个页签时页签重置的问题。
问题描述:如下图所示,一共有4个页签,关闭前3个都没有问题,能够正确关闭,不会影响其他页签。但是,只要关闭最后一个页面,就会自动关闭其他页签,只保留默认的前2个。百思不得其解!
store.js
import {writable}from 'svelte/store';
let menus = [{u:'/home',n:'首页'},{u:'/home/program',n:'项目管理'}]
function openedTab(obj)
{const {subscribe,update} =writable(menus)
return {subscribe,open: (obj) =>update(() => {menus.push({u: obj.url,n: obj.name})return menus }),
close: (obj) =>update(() => {let index =0;for (let item of menus) {if (item.u === obj.u) {break;}index++;}if (index > -1)menus.splice(index,1);return menus;})}}
export const opened_tab =openedTab()
+page.svelte
<script>
import Header from "../layout/Header.svelte";
import LeftMenu from "../layout/SideBar.svelte";
import Tab_item from "./items/Tab_item.svelte";
/* 同步打开页面 */
import {opened_tab} from "../../store/stores.js";
</script>
<div class="sticky"> <Header/></div><div class="flex flex-row"> <div class="basis-1/8 ml-3 mt-3"> <LeftMenu/> </div> <div class="basis-7/8 mx-3 my-3">
<main>
<div class="w-full px-3 bg-slate-100 mt-1 rounded-t-lg">
{#each $opened_tab as m}
<Tab_item url={m.u} name={m.n}>
</Tab_item>
{/each}
</div> <slot> </slot>
</main> </div></div>
**
第二个,snapshot功能失灵。**
问题描述:当打开多个项目信息页面时,编辑其中输入框,此时切换至其他页面时,需要不丢失已输入信息。官方给出的解决方案是使用snapshot(快照)。参照官方案子,经过多轮多天尝试,该功能在使用浏览器自带的前一页、后一页操作是有效的,但是使用goto或href是无效的!
+page.svelte
/** @type {import('./$types').Snapshot<string>} */
export let form;$:comment = null
/* 添加$:,用于保护(preserve)前一路由页面数据 */
$:proinfo = data.data[0]
export const snapshot = { capture: () => comment, restore: (value1) => comment = value1};
<label for="comment">Comment</label><textarea id="comment" bind:value={comment}></textarea>