【问题标题】:Vue.js: How can I trigger one function with multiple events on the same element?Vue.js:如何在同一个元素上触发一个具有多个事件的函数?
【发布时间】:2021-04-26 17:11:03
【问题描述】:

我正在学习 Vue,我想将 multipe 事件绑定到 single 函数在同一元素中,如下所示(在纯 JavaScript 中,随意运行代码 sn-p):

let mainElement = document.querySelector("h1");

// I made an 'events' array to loop
["click", "mouseenter", "And we can keep adding events..."]
.forEach( event => {
    mainElement.addEventListener(event, myFunction);
  }
);

function myFunction() {
  // DO SOMETHING, for example:
  mainElement.style.color = "red";
}

const resetButton = document
.querySelector("button")
.addEventListener("click", () => {
  mainElement.style.color = "black";
});
<h1 style="color: black">This is the element we want to control</h1>

<button>Reset</button>

在 Vue.js 中,我可以将 ONE SINGLE EVENT 直接绑定到这样的元素:

<h1 @mouseenter="myFunction">This is the element we want to control</h1>

我想知道是否有办法将 MULTIPLE EVENTS 绑定到同一元素内的单个函数,有人知道是否有这样的语法吗?

<h1 @[mouseenter,click,mouseleave...]="myFunction">This is the element we want to control</h1>

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    如果我仍然正确,你可以这样做。

    <h1 v-on="handlers">This is the element we want to control</h1>
    
    // ...
    
    data() {
      const vm = this;
    
      return {
        handlers: {
          mousedown: vm.myFunction,
          touchstart: vm.myFunction
        }
      }
    },
    
    function myFunction() {
      // DO SOMETHING, for example:
      mainElement.style.color = "red";
    }
    

    很久没做vue了,但如果我是正确的,这应该可以工作。

    【讨论】:

    • 感谢您的回复!对了,请问那个语法属于哪个版本的Vue?我正在学习第 3 版,到目前为止,我还没有看到“const vm = this”声明,谢谢!
    • 我想我上次是在 vue2 中写的。好久没用vue了。而“const vm = this”只是为了确保我们仍然使用相同的 this 元素。关于这样写有很多意见,因为有些人会允许这样做,有些人说这不是最佳实践。就个人而言,如果它有效,那没关系;)
    • 成功了!我不需要声明“const vm = this”,直接使用“this”即可。另一方面,有没有办法在这种语法中使用“@”?我尝试按以下方式进行操作,但没有成功:

      这是我们要控制的元素

    • 太棒了!很高兴知道将来不再需要“const vm = this”。如果我是正确的,那么@ == v-on 所以 v-on:click 变成了@click。我不知道如果你使用 @ 而不是 v-on 是否会起作用(所以你有 @="handlers")。如果那是不可能的,那么我担心我不知道该怎么做。
    • 我是这样写的,因为它存在一些问题,但它是一些较旧的代码。如果我能在我所处的情况下以某种方式阻止它,现在可能会做更多的研究。但如果不需要,请同意不要这样做。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多