EventBus系列:Event Bus 3.0中索引Subscriber Index使用指南

为什么要使用索引?

Subscriber Index(订阅者索引)是一个可选择的优化技术,用来加速初始化subscriber注册。具体怎么加速的,有时间再研究吧!

怎么用?

以下是Gradle 3.0中配置方式-annotationProcessor方式,其中步骤4为重点,我当初按照前三个步骤设置完毕后,竟然一直添加不成功,生成不了目标类。

1、在项目的build.gradle中添加对EventBus库的引用,需要引入EventBus库eventbus工程和注解编译器eventbus-annotation-processor

2、为了使注解编译器自动生成索引类,需要在指定索引类名的全路径。

   javaCompileOptions {
           annotationProcessorOptions {
               // 这里com.example.myapp为你开发所在项目的包名,MyEventBusIndex为类名,可任意指定
               arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
           }
    }

3、最终在build.gradle文件中的样式为:

android {
 defaultConfig {
     javaCompileOptions {
         annotationProcessorOptions {
            // 这里com.example.myapp为你开发所在项目的包名,MyEventBusIndex为类名,可任意指定
             arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
         }
     }
 }
}

dependencies {
 implementation 'org.greenrobot:eventbus:3.1.1'
 annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}

4、也是重点的步骤,初学者往往会有疑惑的地方

如果此时,重新编译工程,然后按照EventBus给出的教程添加索引初始化时,会提示找不到MyEventBusIndex类。原因是此时工程中还没有使用@SubScribe注解,所以注解编译器无法生成MyEventBusIndex类。所以需要先使用@SubScribe注解之后,重新编译,即可生成MyEventBusIndex类,然后使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3.0可以使用Vue.observable来实现bus总线传值,可以在不同组件之间共享状态。具体使用方法可以参考Vue官方文档:https://vuejs.org/v2/guide/migration-observable.html ### 回答2: 在Vue 3.0使用事件总线(bus)传值,可以通过创建一个vue实例作为央事件总线来实现。首先,需要在Vue应用的入口文件创建这个央事件总线,可以命名为`bus.js`: ```javascript import { createApp } from 'vue' const app = createApp({}) const bus = app.config.globalProperties.$bus = app._bus = new app() export default bus ``` 然后,在你想要传值的组件,可以通过`$emit`方法触发自定义事件,并将数据作为参数传递: ```vue <template> <button @click="sendMessage">发送消息</button> </template> <script> import { defineComponent } from 'vue' import bus from './bus.js' export default defineComponent({ methods: { sendMessage() { bus.$emit('message', 'Hello, World!') } } }) </script> ``` 将数据发送到央事件总线后,其他需要接收数据的组件可以使用`$on`方法来监听自定义事件,并在回调函数获取传递的值: ```vue <template> <div>{{ receivedMessage }}</div> </template> <script> import { defineComponent, ref, onMounted } from 'vue' import bus from './bus.js' export default defineComponent({ setup() { const receivedMessage = ref('') onMounted(() => { bus.$on('message', (message) => { receivedMessage.value = message }) }) return { receivedMessage } } }) </script> ``` 这样,当发送消息的组件点击按钮时,接收消息的组件会更新其的`receivedMessage`数据,从而实现了在Vue 3.0使用央事件总线传值的功能。 ### 回答3: 在Vue 3.0,我们可以使用事件总线(event bus)来实现组件之间的通信并传值。下面是使用事件总线传值的步骤: 步骤1:创建一个事件总线对象 在一个独立的JavaScript文件,创建一个Vue实例作为事件总线对象: ```javascript // eventBus.js import { createApp } from 'vue' export const eventBus = createApp({}) ``` 步骤2:在需要传值的组件引入事件总线 在需要传值的组件,引入事件总线对象: ```javascript import { eventBus } from './eventBus.js' ``` 步骤3:在发送方组件发送事件 在发送方组件,通过事件总线对象发送一个事件,并传递需要传的值: ```javascript eventBus.config.globalProperties.$emit('eventName', value) ``` 其'eventName'是自定义的事件名,value是需要传递的值。 步骤4:在接收方组件接收事件 在接收方组件,通过事件总线对象监听事件,获取传递的值: ```javascript eventBus.config.globalProperties.$on('eventName', (value) => { // 接收到传递的值 }) ``` 在事件回调函数,可以通过参数获取到传递的值。 步骤5:注销事件监听(可选) 在接收方组件销毁前,可以通过eventBus对象的$off方法注销事件监听: ```javascript eventBus.config.globalProperties.$off('eventName') ``` 通过以上步骤,我们就可以在Vue 3.0使用事件总线(event bus)来实现组件之间的通信和值的传递。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值