2 回答
TA贡献1853条经验 获得超9个赞
当您设置on:click为 时toggleView(line1),该函数会立即执行,就像您将其设置为toggleView()而不是toggleView在其他工作示例中一样。
您有两种方法可以解决此问题。最常见的方法是将on:click处理程序转变为 lambda/匿名函数:
<button on:click="{() => toggleView(line1)}">{line1.display}</button>
另一种不太常见的方法是修改处理函数并将其转换为柯里化函数:
function toggleView(field) {
return function() {
field.visible = !field.visible;
if(!field.visible) field.display = "*************"
else field.display = field.originalText
};
};
在这种情况下on:click={toggleView(field)},将返回一个绑定到单击处理程序的函数,并且该函数将在单击按钮时实际执行。
TA贡献1848条经验 获得超10个赞
在原始 HTML + JS 中,内联事件处理程序实际上onclick
是在事件发生时将执行的一段代码。特别是,如果您在处理程序中使用函数,则必须调用它:
示例(不是 Svelte):
<button onclick="toggleView()" />
相反,在 Svelte 中,事件处理程序应该是一个函数,它将在事件发生时被调用。
好的,因为toggleView
是一个函数:
<button on:click={toggleView} />
不好,因为它toggleView()
每次渲染标记时都会调用(即当响应式变量更改时),并且 _the 的返回值togggleView()
绑定到click
事件:
<button on:click={toggleView()} />
如果您需要将本地参数传递给事件处理程序,那么您需要包装该函数以仍然获得您想要的内容(在事件发生时调用整个函数,而不是在重新调用标记时调用):
示例,OK + 参数:
<button on:click={() => toggleView(line1)} />
请注意,这里的处理程序是() => toggleView(line1)
,而不是toggleView(line1)
。
添加回答
举报