当前位置: 首页 > 知识库问答 >
问题:

如何将参数传递到ON:Click in Svelte?

归德厚
2023-03-14

将函数绑定到按钮是简单明了的:

<button on:click={handleClick}>
    Clicks are handled by the handleClick function!
</button>

但我看不到一种向函数传递参数(参数)的方法,当我这样做时:

<button on:click={handleClick("parameter1")}>
    Oh no!
</button>

该函数在页面加载时调用,并且不再调用。

是否有可能将参数传递给从上调用的函数:Click{}

null

null

我只是找到了一个很奇怪的方法。从内联处理程序调用该函数可以工作。

<button on:click={() => handleClick("parameter1")}>
    It works...
</button>

共有2个答案

丁念
2023-03-14

Rich在一个评论中回答了这个问题,这值得称赞,但是在click处理程序中绑定参数的方法如下:

<a href="#" on:click|preventDefault={() => onDelete(projectId)}>delete</a>

function onDelete (id) {
  ...
}

为了给那些也在纠结这一点的人提供一些额外的细节,如果不是,它应该在文档中,您还可以在这样的处理程序中获得click事件:

<a href="#" on:click={event => onDelete(event)}>delete</a>

function onDelete (event) {
  // if it's a custom event you can get the properties passed to it:
  const customEventData = event.detail

  // if you want the element, you guessed it:
  const targetElement = event.target
  ...
}
费明诚
2023-03-14

只需将处理程序函数包装在另一个函数中即可。为了美观起见,使用箭头函数。

您必须使用函数声明,然后使用参数调用处理程序。箭头函数非常适合这种情况。

为什么我需要另一个函数包装器?

如果只使用处理程序并传递参数,会是什么样子?

大概是这样的:

<button on:click={handleClick("arg1")}>My awesome button</button>

但请记住,handleClick(“arg1”)这是您立即调用函数的方式,而这正是您以这种方式调用函数时所发生的情况,当执行到达这一行时,它将被调用,而不是预期的那样,单击按钮时...

因此,您需要一个函数声明,该函数声明将仅由click事件调用,并且在该函数声明中,您可以使用所需的任意多个参数来调用处理程序

<button on:click={() => handleClick("arg1", "arg2")}>
    My awesome button
</button>

正如@Rich Harris(Svelte的作者)在上面的评论中所指出的:这不是一个黑客,而是文档在他们的教程中所展示的:https://Svelte.dev/tutorial/inline-handlers

 类似资料:
  • 我试图在不同的浏览器下运行cumber测试,所以我有(是的,目前只有一个浏览器) 在这个TestNG runner类中,我可以从这个runner类中访问参数,但是我需要将这个变量传递给Cucumber,根据传递的变量创建浏览器实例。到目前为止,我在没有TestNG的情况下使用它,我通过环境变量传递这些变量,但是我假设如果我在不同的浏览器上并行运行测试,这将不起作用。 有没有办法做到这一点?

  • 我有一个Gradle构建脚本,我试图将Eric Wendelin的CSS插件包含其中。 它很容易实现,因为我只想缩小(而不是合并和gzip),所以我得到了构建脚本的相关部分,如下所示: 这是完美的-当我运行gradle war任务时,它会调用mini fyCss任务,获取源css文件,并在buildDir中创建一个缩小版本 但是,我有一些需要缩小的css文件,但没有组合成一个文件(因此我没有使用组

  • 问题内容: 我已经编写了这个jQuery ajax方法,在下面调用了webmethod。除了作为用户对象的参数具有空字段之外,调用进行得很好。我在调试时可以在firebug中看到值,但它们无法通过webmethod中的User对象参数 我试图从jQuery方法传递给Webmethod的两个值是“ UserID”(Guid)和“ About”(字符串),它们都是User类的属性,但在服务端,是Use

  • ...下面的类是骆驼处理器,它最终被调用: 我知道Apache CXF使用的Exchange类与Camel使用的Exchange不同,但是这两种集成技术之间应该有一种传递信息的方式?

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 我搜索如何将springboot参数传递给spring批处理作业的解决方案,然后在我的Writer中获得参数的值。当我在writer中加载键时,键仍然为空。有人能帮帮我吗? 下面是我的批处理代码配置 还有我的作家 }