VUE学习——循环列表bus监听状态及点击一个改变自己和兄弟的状态

VUE学习——循环列表bus监听状态及点击一个改变自己和兄弟的状态

在/lib 目录下建立bus.js文件,内容:

import Vue from 'vue'
const Bus = new Vue()
export default Bus

在main.js中添加

import Bus from '@/lib/bus' 
Vue.prototype.$bus = Bus 

子组件内容:

<template>
  <div class="listcard" :class="{ active: isActive }">
    <div class="news-card-head">
      {{ name }}
    </div>
  </div>
</template>

<script>
export default {
  name: "Mlistitem",
  data: function () {
    return {};
  },
  props: {
    isActive: {
      type: Boolean,
      default: false,
    },
    name: {
      type: String,
    },
  },
  methods: {},
};
</script>

<style scoped lang="scss">
.listcard {
  background: #ddd;
  margin: 10px;
  padding: 5px;
}
.listcard.active {
  background: #ff0;
}
</style>

父组件内容:

<template>
  <div class="contactlist">
    <Mlistitem
      v-for="item in list"
      :key="item.index"
      v-bind="item"     
      @click.native="change(item)"
      
    >
    </Mlistitem>
  </div>
</template>

<script>


import Mlistitem from "@/components/Mlistitem.vue";

export default {
  name: "contactlist",
  data() {
    return {
      pagetitle: "联系方式",
      list: [
        {
          name: "物业前台",
          id:1,
          isActive:false
        },
        {
          name: "客服热线",
          id:2,
          isActive:false
        },
        {
          name: "工程部",
          id:3,
          isActive:false
        },
        {
          name: "客服热线",
          id:4,
          isActive:false
        },
      ],
    };
  },
  components: {
    Mlistitem,
  },
  methods: {
    change(e) {
      console.log(e);
      e.isActive = true;
      this.$bus.$emit('changeValue', e);  //发送当前点击的子组件的item值给bus
   
    },
  },
  mounted () {
            console.log(this.$bus)      // 打印出 this.$bus对象
            this.$bus.$on('changeValue', msg => {   //接收bus发送的对象
                this.list.forEach(e => {   //循环对比list中的值
                    if(msg.id === e.id){
                        e.isActive = true;      //如果id相同则激活状态为true
                    }else{
                        e.isActive = false;
                    }
                    
                });
            })
        }
};
</script>

效果:
点击任一行,本行变色
点击任一行,本行变色
再点击其他行,当前点击的变色,刚才点的恢复初始灰色
再点击其他行,当前点击的变色,刚才点的恢复初始灰色

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值