【发布时间】:2017-09-12 02:39:39
【问题描述】:
我想要什么
如果有请求,我想发出一个事件,如果有响应,我想发出另一个事件,并在我的App.vue 中收听它。
情况
我正在使用VueResource 和内置拦截器:
import Vue from 'vue'
import VueResource from 'vue-resource'
Vue.http.interceptors.push((request, next) => {
next((response) => {
})
})
const app = new Vue({
render: h => h(App)
}).$mount('#app')
我尝试了什么
引导
Vue.http.interceptors.push((request, next) => {
Vue.emit('request', request)
next((response) => {
Vue.emit('response', response)
})
})
App.vue
<template>
<div v-on:request="doStuff">
<navigation-bar></navigation-bar>
<router-view></router-view>
</div>
</template>
我收到此错误:
TypeError: __WEBPACK_IMPORTED_MODULE_0_vue___default.a.$emit 不是 功能
讨论后的新 App.vue
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
import EventBus from './EventBus'
export default {
created () {
EventBus.$on('request', this.invokeLoading())
EventBus.$on('response', this.stopLoading())
},
methods: {
invokeLoading () {
console.log('Start')
},
stopLoading () {
console.log('Stop')
},
}
}
</script>
【问题讨论】:
-
要发出你需要一个 Vue 实例
new Vue()。Vue如果 console.logged 是一个函数。所以错误。 -
谢谢你,@AmreshVenugopal!常量 app 已经创建了一个 vue 实例。这还不够吗?
-
EventBus.$on('request', this.invokeLoading())请不要调用该函数。您需要按原样传递函数,例如:EventBus.$on('request', this.invokeLoading) -
是的,是的,是的!现在可以了 :) 你是我的英雄!
标签: javascript vue.js vue-resource