关于javascript:Vue中点击谁让谁高亮其他元素保持原来样式不变

每次写Vue的这个货色都会让我想起之前原生js的写法:

el.onclick = function () {
    for (let i = 0, len = items.length; i < len; i++) {
          items[i].className = '';
    }
    this.className = 'active';
}

到了写Vue时,感觉这样写总会引起一些其余不必要的麻烦,所以起初本人思考了一下,就有了下边这种Vue式写法:

<div class="btn-group">
    <button
        :class="{ active: thisName == i }"
        v-for="(item, i) in propSwiperData"
        :key="i"
        :name="i"
        v-text="item.title"
        @click="btnClick"
    ></button>
</div>
data() {
    return {
        thisName: '',
    }
},
methods: {
    btnClick(e) {
        this.thisName = e.target.name
    },
},

剖析:
class的款式绑定中须要传入1个对象,对象的属性名是类名,属性值则须要true或者false,当为true时,类名则显示在元素中,并且与之对应的款式也会渲染进去。

那么就true这个值作为考量规范进行操作。

我这里在元素中绑定了name属性,当然也能够绑定其余你后边能够获取到的属性,我将name属性的值绑定为循环中的索引了,保障其唯一性

而后每个button点击时会默认传入1个事件对象

那么此时我在事件回调函数btnClick中就能够利用e.target.name获取到我在元素中绑定的name属性对应的值。

这个时候我只须要将name的值赋值给数据中thisName即可,同时在元素中写入thisName == i,此时我点一个按钮,那么thisName是必然与i相等的,就会触发高亮。

此时如果你在btnClick中给thisName赋值前打印thisName你就会发现,每次点击并且未赋值时,thisName都为上次的后果,这样就能够实现点谁谁高亮(两个数据比照时,i是惟一的,所以只会有1个ithisName比照返回ture

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理