简单来说,就是一个子组件通过$emit来传一个object到父组件,但是父组件接收不到参数
比如一个简单的单页面应用,app.vue 文件里面通过 vue-router 引入了 a组件 和 b组件
代码大概如下
<div class='app'>
<div class='nav'>
<router-link to='/a'>前往a页面</router-link>
<router-link to='/b'>前往b页面</router-link>
</div>
<div class='content'>
<router-view></router-view>
</div>
</div>
然后,现在点击 a组件 里面的一个按钮之后,
把一个对象传到 b组件 (不用vuex)
我的想法就是,点击了a组件的button之后,this.$emit一个事件,
然后把对象做为参数,一起传到app.vue ,
然后在app.vue 通过监听事件获取到 a组件 传来的事件和参数
然后 我试了一下在分别在app.vue的 .content 和 router-view 用v-on 来接收事件
发现在router-view能够成功接收到a组件传来的事件
然后试着console一下接收到的参数
发现输出undefined
代码大概如下:
<!--app.vue-->
<div class="view-wrapper">
<router-view @tomodify="sendData(good)"></router-view>
</div>
//script in app.vue
methods: {
sendData (good) {
this.agood = good
console.log(this.agood) //成功执行但是输出 undefined
}
}
<!-- a组件 -->
<button class="modifyBtn" @click="toModify(good)">修改</button>
//script in a组件
data () {
toModify (good) {
console.log(good) //成功输出一个对象
this.$emit('tomodify', [good])
}
}
希望各位大佬指教一下,很简单的问题但是搞了好久
appreciate。
你干脆安装一个vue-bus插件吧
入口文件引入一下
A组件:
B组件: