Vuejs得到了一个被事件调用的元素?

Ste*_*n-v 8 javascript jquery json vue.js

我有多个列表项,我想在点击它们时切换活动类.

<ul class="list-body">
    <li v-on="click: setFilter('style', 'pils')" v-class="active: isActive">Pils</li>
    <li>Dubbel</li>
    <li>Tripel</li>
    <li v-on="click: setFilter('style', 'Quadrupel')">Quadrupel</li>
    <li>Wit</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我已经有一个setFilterclick功能,我可以在其中添加额外的功能来激活类onClick.

setFilter: function(facet, value) {
    // Facet for style of beer(search filter)
    this.helper.addDisjunctiveFacetRefinement(facet, value).search();
},
Run Code Online (Sandbox Code Playgroud)

我的问题是如何选择li被点击的特定元素并调用with setFilter方法?

我想为活动类false或已单击(或未单击)的true每个li元素设置变量.

Pat*_*ick 18

您可以直接在函数中传递事件和事件目标.目标是您单击的元素.

HTML:

<ul id="demo">
    <li v-on="click: onClick">Trigger a handler</li>
    <li v-on="click: n++">Trigger an expression</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

JS:

var vue = new Vue({
  el: '#demo',
  data: {},
  methods: {
    onClick: function (e) {
      var clickedElement = e.target;
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

使用您的元素,您可以做您想做的事.例如,如果您使用jQuery:

$(clickedElement).siblings().removeClass('active');
$(clickedElement).addClass('active');
Run Code Online (Sandbox Code Playgroud)

  • 在我的示例中,我只使用了一个简单的问题:click:setFilter('style','pils')因为我传递参数,所以事件处理程序不起作用.如何让它像带参数的函数一样工作我是否以某种方式将事件作为参数传递? (2认同)
  • @TomásCot 我是通过 *v-on:click="bla($event)"* 让它工作的,但我猜如果它被提供了,就没有必要传递事件。谢谢! (2认同)
  • @KonradViltersten,这不是必需的,但是当您还需要传递一些其他参数时,知道它可能会派上用场。 (2认同)