【问题标题】:Target clicked element in VueVue中的目标点击元素
【发布时间】:2019-02-22 08:58:03
【问题描述】:

在 Vue.js 中,如何定位/检测被点击的元素以执行基本的切换类?

我已经写了这个切换成功但是当你点击一个a时,这个类被应用到所有li

HTML

  <ul id="app" class="projects">
    <li v-bind:class="dyClass"><a href="" v-on:click.prevent.stop="show = !show">Project A</a></li>
    <li v-bind:class="dyClass"><a href="" v-on:click.prevent.stop="show = !show">Project B</a></li>
    <li v-bind:class="dyClass"><a href="" v-on:click.prevent.stop="show = !show">Project C</a></li>
    <li v-bind:class="dyClass"><a href="" v-on:click.prevent.stop="show = !show">Project D</a></li>   </ul>

JS

  new Vue({
    el: '#app',
    data: {
      show: false,
    },
    computed: {
      dyClass: function() {
        return {
          show: this.show
        }
      }
    }
  })

我是 Vue 的新手。

编辑。

我设法在下面的帮助下让它工作,但我似乎无法获得切换效果。

  <ul id="app" class="projects">
    <li :class="{show:selected == 1}">
      <a href="" @click.prevent.stop="selected = 1" >Exposure</a>
    </li>
    <li :class="{show:selected == 2}">
      <a href="" @click.prevent.stop="selected = 2" >Exposure</a>
    </li>
    <li :class="{show:selected == 3}">
      <a href="" @click.prevent.stop="selected = 3" >Exposure</a>
    </li>        
  </ul>

  new Vue({
    el: '#app',
    data: {
      selected: false,
    }
  });

【问题讨论】:

  • 每次点击事件都绑定同一个类。因此,如果单击任何项​​目,它会切换类的当前状态(每个项目都有)。您需要通过唯一 ID 定位每个列表项。

标签: javascript jquery vue.js


【解决方案1】:

据我了解,您有一些 li 项目,并且您希望在单击特定 li 时添加一个活动类。

解决方案:

“html”部分:

<div id="app">
  <ul class="projects">
    <li v-for="project in projects"
        :key="project.id"
        :class="{ active: project.id === activeProjectId }"
        @click="activeProjectId = project.id"
    >
      <a href="#">{{ project.name }}</a>
    </li>
  </ul>
</div>

“vue”部分

new Vue({
  el: "#app",
  data: {
        projects: [
     { id: 1, name: 'Project A' },
     { id: 2, name: 'Project B' },
     { id: 3, name: 'Project C' },
     { id: 4, name: 'Project D' },
    ],
    activeProjectId: 1
  },

})

然后将一些 css 添加到 'active' 类中。

更多信息,See the fiddle

【讨论】:

  • 抱歉耽搁了。这很好用..我觉得它可以更简单吗?我确实想出了一些东西。要去发帖了。
【解决方案2】:

您可以将元素传递给函数 ($event):

:click=dyClass($event) 然后在计算中:

dyClass: function(event) {
    event.target.toggleClass('whatever')
}

【讨论】:

  • 我得到一个未定义的“toggleClass”错误。如果有更好的方法来达到同样的效果,我会全力以赴
  • .toggleClass() 是一个 jQuery 方法。对于 vanilla JS,您可以使用 event.target.classList.toggle('whatever')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2011-03-15
相关资源
最近更新 更多