是否可以使用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