Как вы генерируете событие из плагина nuxt? - PullRequest
0 голосов
/ 28 сентября 2019

Я создаю плагин, который будет генерировать базовые события nuxt, запускаемые сокетами.Затем будет получено пустое событие, и откроется закусочная.Внутри компонента легко отправлять и получать события, используя $nuxt

this.$nuxt.$on('open-snackbar', this.handler)
this.$nuxt.$emit('open-snackbar', options)

Однако, как я пытаюсь сделать это в плагине, чтобы он не привязан ни к одной странице,но существует во всем приложении.Кажется, я не могу понять, как испустить его из указанного плагина:

export default (context) => {
    console.log(context)
    console.log(context.$emit)
    console.log(context.emit)
    console.log(context.$nuxt)
    console.log(context.app.emit)
    console.log(context.app.$nuxt)
}

context.app кажется, что это будет правильный объект, но он не работает.Есть идеи?

1 Ответ

0 голосов
/ 01 октября 2019

Это не то решение, которое я искал, но в качестве обходного пути я внедрил другой экземпляр vue в качестве плагина для использования в качестве шины событий.Он не использует контекст nuxt, как я изначально хотел, но работает.

import Vue from 'vue'

export const bus = new Vue()

export default (_context, inject) => {

    // Client only
    if (process.client) {
        // Event bus for plugins
        inject('bus', bus)
    }
}

/**
 * Socket that pops open a snackbar
 */
export default ({ app: { $bus, $sockets } }) => {

    // Incoming message
    $sockets.on('message', payload => {

        // When we are on the messages page with the user
        if (window.location.pathname === `/messages/${payload.message.sender.username}`) {
            $bus.$emit('message-conversation', payload)
        }
        // Elsewhere, or messages with a different user
        else {
            $bus.$emit('open-snackbar', {
                body: payload.message.body,
                link: `/messages/${payload.message.sender.username}`,
                user: payload.message.sender
            })
        }
    })

    // Incoming notification
    $sockets.on('notification', payload => {
        $bus.$emit('open-snackbar', {
            body: payload.notification.text,
            link: payload.notification.link || '/notifications',
            user: payload.notification.source
        })
    })
}

...