Vue2 EventBus事件总线 | 实现组件间的通信&改变大屏背景颜色实践

Posted LyCat_00

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue2 EventBus事件总线 | 实现组件间的通信&改变大屏背景颜色实践相关的知识,希望对你有一定的参考价值。

效果:

创建实例

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>

以上是关于Vue2 EventBus事件总线 | 实现组件间的通信&改变大屏背景颜色实践的主要内容,如果未能解决你的问题,请参考以下文章

guava中EventBus(事件总线)源码分析与使用

Vue事件总线(eventBus)$on()会多次触发解决办法

EventBusEventBus 事件总线框架简介 ( EventBus 使用流程 )

手写eventBus事件总线

Flutter EventBus事件总线的应用

Flutter EventBus事件总线的应用