亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

vue 奇葩問題

vue 奇葩問題

慕森王 2019-03-25 11:39:04
今天遇到一個奇葩的問題我使用bus.js傳值然后兄弟組件里面出現一個很怪的問題,我使用2號模塊先制作值,然后3號模塊獲取,但是獲取不到。我使用3號模塊在前就可以。一般邏輯不是得先由2號模塊先做好值然后3號回去嘛,怎么現在我3號在前反而能實現呢??<template>   <div>     <demo-val2></demo-val2>     <demo-val3></demo-val3>   </div></template><script>   import demoVal2 from './demo2.vue'   import demoVal3 from './demo3.vue'   export default {    name: '',    components: {       demoVal2,       demoVal3     }   }</script><template>   <div>demo2</div></template><script>   import bus from './bus.js'   export default {    name: "demo2",     mounted() {      console.log(2222)       bus.$emit('val', 'toval')     }   }</script><template>   <div>demo3</div></template><script>   import bus from './bus.js'   export default {    name: "demo3",     mounted() {      console.log(3333)       bus.$on('val', (data) => {        console.log(data)       })     }   }</script>不顯示123 /*******************************************/ 交換一下<template>   <div>     <demo-val3></demo-val3>     <demo-val2></demo-val2>   </div></template>輸出123這是為什么呢????
查看完整描述

2 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

$on 定義事件
$emit 觸發事件 你打印的是傳過去的值 肯定要在后面執行啊

查看完整回答
反對 回復 2019-03-25
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

demo2在上面demo3在下面的時候你是先觸發監聽再設置監聽當然沒有任何反應,倒過來就是先設置監聽再觸發監聽就好使了,這個應該和頁面的渲染順序有關系,你可以試著把2放上面3放下面的時候在demo2里面加

setTimeout(() => {
  bus.$emit('val', 'toval')
}, 0)

這樣就可以一直打印出來了


查看完整回答
反對 回復 2019-03-25
  • 2 回答
  • 0 關注
  • 459 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號