是否可以使用Vue.js触发事件?

我刚刚开始使用Vue.js,并发现自己不断转向jQuery来帮助某些情况。 最近,我试图“触发”(或模仿)某个事件,例如点击或模糊事件,但未成功。

我知道在jQuery中你可以做到以下几点:

$('#my-selector').trigger('click'); 

但是如何使用Vue.js实现这一目标呢? 我想尽可能地避免使用jQuery。

以下面的例子为例:

 
new Vue({ el: "#my-scope", data: { foo: "Hello World" }, methods: { myClickEvent: function(e) { console.log(e.targetVM); alert(this.foo); }, anotherRandomFunciton: function() { this.myClickEvent(); } } });

如果我要调用anotherRandomFunciton ,我希望它模拟(或触发)上面的click事件。 但是,我尝试这个事件(或上例中的e )永远不会传递给函数。

Vue.js有实现这个目标的方法吗?

您需要使用v-el来获取对按钮的引用,如下所示:

  

然后,在您的方法中:

 function anotherRandomFunction() { var elem = this.$els.myBtn elem.click() } 

它只是一个本机DOM点击事件。 请参阅v-el文档

或者从Vue 2.x开始:

   

由于Vue仅使用和侦听本机DOM事件。 您可以使用Element#dispatchEvent触发本机DOM事件,如下所示:

 var elem = this.$els.myBtn; // Element to fire on var prevented = elem.dispatchEvent(new Event("change")); // Fire event if (prevented) {} // A handler used event.preventDefault(); 

这不是完全理想或最佳实践。 理想情况下,您应该有一个处理内部的函数和一个调用该函数的事件处理程序。 这样,您可以随时调用内部。

如果有人偶然发现了这一点,我就是这样做的:

当使用它时。$ refs.myBtn.click()我得到“Uncaught TypeError:this。$ refs.myBtn.click不是函数”

将其更改为: this。$ refs.myBtn。$ el.click()

需要说明的是:“ $ el ”需要添加才能正常工作。

Vue本质上是狭隘的 – 它的目的是与jQuery一起使用其他软件包。 我认为使用jQuery的trigger就好了。

但是,如果您想在没有jQuery的情况下创建自己的事件,请查看dispatchEvent

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

或者,对于click的特定情况,您可以使用DOM元素的方法:

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click