我正在制作一个模态,其属性存储在商店中。而不是像这样从元素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) =>
)访问当前对象,但均未返回任何内容。
答案 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