如何在Svelte中使用自定义存储方法?

时间:2019-10-29 15:46:55

标签: svelte svelte-store

我正在制作一个模态,其属性存储在商店中。而不是像这样从元素on:click={() => $modal.isOpen = true}

中打开它

我想这样打开它: on:click={() => $modal.toggle()}来自一个元素。

这是我的代码:

export const modal = writable({
    isOpen: false,
    title: 'Title',
    content: 'Content',
    toggle: () => {
        console.log(modal)
        modal.set({ ...modal, isOpen: true });
    }
}); 

当我登录modal时,它仅记录set, subscribe, update方法。然后,当我再次单击时,这些方法就消失了:它正确地覆盖了它们,似乎我永远无法获得模态的初始化状态。我尝试使用this或参数((a, b) =>)访问当前对象,但均未返回任何内容。

1 个答案:

答案 0 :(得分:2)

传递给writable的参数仅包含数据,而不包含方法。要创建自定义商店,请像this tutorial一样做-创建包装writable的自己的商店工厂:

const toggleable = initial => {
  const store = writable(initial);

  return {
    ...store,
    toggle: () => store.update(n => !n)
  };
};

const modal = toggleable(false);

此处演示:https://svelte.dev/repl/682ef8309f924ba7ad8de1e2f5069988?version=3.12.1