Nuxtjs eventbusプラグイン
1792 ワード
NuxtjsはVUE SSRのフレームワーク実装であり、nuxtjsでは以下の方法で処理できる個別のイベント処理が用いられる場合がある.
plugins/bus-injectを追加します.jsの内容は以下の通りです
コンビネーションインジェクション
必要に応じてcontext、Vueインスタンス、さらにはVuex storeでinjectメソッドUse inject nuxt functionを使用します.
nuxt.config.js構成プラグイン、詳細https://nuxtjs.org/api/configuration-plugins
コンポーネント内のトリガーイベント
コンポーネント内のイベントの受信
連合注入法を採用した後
コンポーネントへの適用
Storeでの適用
plugins/bus-injectを追加します.jsの内容は以下の通りです
import Vue from 'vue'
const bus = {}
bus.install = function (Vue) {
Vue.prototype.$bus = new Vue()
}
Vue.use(bus)
コンビネーションインジェクション
必要に応じてcontext、Vueインスタンス、さらにはVuex storeでinjectメソッドUse inject nuxt functionを使用します.
import Vue from 'vue';
export default (ctx, inject) => {
const bus = new Vue;
inject('bus', bus);
};
nuxt.config.js構成プラグイン、詳細https://nuxtjs.org/api/configuration-plugins
module.exports = {
'~/plugins/bus-inject.js',
//or use this for browser using only
{src:'~/plugins/bus-inject.js', ssr: false}
}
コンポーネント内のトリガーイベント
methods:{
eventhandler(){
this.$bus.$emit('name-of-event', 'your-data')
}
}
コンポーネント内のイベントの受信
created () {
this.$bus.$on('name-of-event', (data) {
...
}
}
連合注入法を採用した後
コンポーネントへの適用
export default {
mounted(){
this.$bus.$on('messageSent', e => console.log(e));
},
asyncData({app}){
//app.$bus available here also
}
}
Storeでの適用
export const state = () => ({
messages: []
});
export const actions = {
async sendMessage({commit}){
const message = (await this.$axios.post('/message', {text: 'hello'})).data;
commit('pushMessage', message);
this.$bus.$emit('messageSent');
}
};
export const mutations = {
pushMessage(state, message) {
state.messages.push(message);
this.$bus.$emit('messagePushed', message);
}
}