【Vue EventBus】 | 实现组件间的通信&改变大屏背景颜色实践

11 篇文章 0 订阅

效果:

请添加图片描述

创建实例

src/utils/下新建event-bus.js:

/**
 * 事件总线
 */
import Vue from 'vue'
export const EventBus = new Vue()

子组件 screen.vue:
<template>
  <a-form class="dark" layout="horizontal" :label-col="{span: 6}" :wrapper-col="{span: 14, offset: 1}">
      <a-form-item label="背景颜色" class="bg-color-input">
                <a-input
                    v-model="color"
                    class="bg-color-value"
                    value="#263546"
                    @pressEnter="enterChange"
                    @change="changeColor"
                />
                <el-color-picker
                    v-model="color"
                    class="color-picker"
                    size="small"
                    :predefine="predefineColors"
                    @change="changeColor"
                />
                <img src="@/assets/images/color_icon.png" alt="" class="color-icon">
              </a-form-item>
  <a-form>
</template>
<script>
   export default {
			  data() {
            return {
              loading: false,
              imageUrl: '',
              customStyle: 'background: #212528;border-radius:0;border: 0;overflow: hidden',
              // 背景选择器预定义颜色
              color: '#2F5887',
              predefineColors: [
                  '#1e90ff',
                  '#00ced1',
                  '#90ee90',
                  '#ffd700',
                  '#ff8c00',
                  '#ff4500',
                  '#B81313'
                ],
            }
        },
      methods: {
          // 更改背景颜色 
          changeColor(color) {
            console.log(color)
            EventBus.$emit('changeColor',color) // -- 通过事件总线进行通信
          },
          enterChange() {
            this.color = value
            EventBus.$emit('changeColor',this.color)
          },
      }
   }
</script>

父组件index.vue:
<template>
   <a-layout class="data-view-main">
      <a-layout-sider
        v-model="optionCollapsed"
        class="data-view-option-panel"
        width="400"
        collapsed-width="0"
        :reverse-arrow="true"
        collapsible="true"
      >
        <v-screen
          @changecolor="changeColor"
        >
       </v-screen>
     </a-layout-sider>
</template>

<script>
import  VScreen from '@/views/screen-editor/screen-edit/screen'
import { EventBus } from "@/utils/event-bus";

export default {
  name: 'Index',
  components: {
    VScreen,
  },
  data() {
    return {
      backgroundColor: '',
    }
  },
  
  // 挂载时监听 
  mounted() {
    EventBus.$on('changeColor',(color) => {
      this.backgroundColor = color
    })
  },

  methods: {}
}
</script>

<style lang="less">

</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值