vue循环渲染多个标签,通过点击标签,标签样式改变,再次点击取消且可点击多个并选中多个标签

Posted 水星记_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue循环渲染多个标签,通过点击标签,标签样式改变,再次点击取消且可点击多个并选中多个标签相关的知识,希望对你有一定的参考价值。

前言

相信大家都使用过app的评价功能吧,那下面这张图片你应该很熟悉,今天我们要实现的就是这个需求。首先循环渲染后台返回的数据,这些标签可以点击,点击后会是另一套样式,再次点击恢复默认样式,同时,这些标签可以多选,最后将选中标签的id作为集合传给后台。

实现思路

1.首先循环遍历标签,然后我们要给标签加一个点击事件,并拿到每一个标签的 id(item.id) 作为参数传递到方法中;
2.点击标签时,通过 indexOf() 方法特性进行判断,如果大于-1,则是默认样式,反之则是第二套样式并将选中标签的 id 通过 push 方法添加到 data 中定义好的数组 (gather) 中;
3.因为后端人员想要的数据格式是字符串拼接的格式,所以最后我又通过 join 方法将数组转换成字符串并以逗号隔开,如果想要数组集合则不用转。

实战环节

下面是我写的一个小案例,大家可以直接复制粘贴到自己的项目中,借助代码和注释,可以更快帮助大家理解。

<template>
    <div class="tagBox">
        <!-- // v-for循环模拟的数组lists -->
        <div v-for="(item, index) in lists" :key="index" @click="onPitch(item.id)">
            <span class="tagContant" :class=" tagAlter: gather.indexOf(item.id) > -1 "> item.value </span>
        </div>
    </div>
</template>

<script>
    export default 
        data() 
            return 
                lists: [//模拟数据
                    value: '运行稳定',id: "85",
                    value: '快速响应',id: "23",
                    value: '售后及时',id: "12",
                    value: '解答专业',id: "78",
                ],
                gather: [], //选中集合数组
                stringList: null //选中集合数组转换成字符串
            ;
        ,
        methods: 
            //点击事件 通过传参拿到每一条的id
            onPitch(id) 
                let subscript = this.gather.indexOf(id); //indexOf:返回某个指定的字符串值在字符串中首次出现的位置
                if (subscript > -1) 
                    this.gather.splice(subscript, 1); //splice:用于添加或删除数组中的元素
                 else 
                    this.gather.push(id); //通过push方法将选中id添加到数组中
                
                this.stringList = this.gather.join(',') //转换成字符串并以逗号隔开
                console.log(this.stringList,"选中集合");
            
        
    ;
</script>

<style scoped>
    /* 最外层的大盒子样式 */
    .tagBox 
        display: flex;
        padding: 0px 8px;
    

    /* 默认的样式 */
    .tagContant 
        display: flex;
        align-content: center;
        justify-content: center;
        font-size: 14px;
        width: 80px;
        padding: 3px 0px;
        color: rgb(161, 161, 161);
        border: 1px solid rgb(161, 161, 161);
        border-radius: 4px;
        margin: 10px 4px;
    

    /* 点击后的样式 */
    .tagAlter 
        background-color: rgb(252, 242, 233);
        color: rgb(216, 122, 62);
        border: 1px solid rgb(216, 122, 62);
    
</style>

以上是关于vue循环渲染多个标签,通过点击标签,标签样式改变,再次点击取消且可点击多个并选中多个标签的主要内容,如果未能解决你的问题,请参考以下文章

解决vue ssr css内联样式和link标签重复问题

vue关于获取目标标签索引

vue 给富文本标签添加样式

改变Vue默认组件渲染的标签-router-link-默认渲染成a标签

vue从后台获取的数据有html标签通过v-html渲染到页面,然后怎么给这里面的html添加样式?

vue中使用v-for 循环标签动态改变标签ID