我不不只要子組件之間直接傳值,我還要傳過去再傳回來,傳回來再傳過去,子組件直接反覆橫跳css
解決問題vue
send1() { this.pVue.$emit('send1', { code: this.code }) },
this.pVue.$on('send1', data => { this.code1 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) this.pVue.boo = true })
子組件一發送,子組件二接收,進行邏輯處理後返回組件一flex
send2() { this.pVue.$emit('send2', { code: this.code }, (data) => { console.log(`按鈕組件 => 接收回傳 ${data.code}`) }) },
this.pVue.$on('send2', (data, cb) => { this.code2 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) // 我的邏輯... 而後返回參數 cb({ code: data.code }) })
send3() { this.pVue.$emit('send3', { code: this.code }, (data, cb) => { console.log(`按鈕組件 => 接收回傳 ${data.code}`) cb({ code: data.code }) }) }
this.pVue.$on('send3', (data, cb) => { this.code3 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) // 我的邏輯... 而後返回參數 cb({ code: data.code }, () => { this.code4 = data.code console.log(`表格組件 => 再次接收參數 ${data.code}`) }) })
<template> <div class="home"> <button-list :p-vue="pVue" /> <div style="height: 20px" /> <table-list :p-vue="pVue" /> </div> </template> <script> import Vue from 'vue' import ButtonList from './components/button-list' import TableList from './components/table-list' export default { name: 'Home', data() { return { pVue: new Vue() } }, components: { ButtonList, TableList } } </script> <style lang="scss" scoped> .home { height: 100%; width: 100%; display: flex; flex-direction: column; align-items: center; } </style>
<template> <div> <el-input v-model="code" placeholder="過程在控制檯" /> <el-row style="margin-top: 20px"> <el-button :disabled="code ===''" type="primary" @click="send1()">單項發送</el-button> <el-button :disabled="code ===''" type="primary" @click="send2()">發送並接收回傳</el-button> <el-button :disabled="code ===''" type="primary" @click="send3()">發送接收並再發送</el-button> </el-row> </div> </template> <script> export default { data() { return { code: '' } }, props: { pVue: { type: Object } }, methods: { /** * 單項發送 */ send1() { this.pVue.$emit('send1', { code: this.code }) }, /** * 發送並接收回調 */ send2() { this.pVue.$emit('send2', { code: this.code }, (data) => { console.log(`按鈕組件 => 接收回傳 ${data.code}`) }) }, /** * 發送接收並再發送 */ send3() { this.pVue.$emit('send3', { code: this.code }, (data, cb) => { console.log(`按鈕組件 => 接收回傳 ${data.code}`) cb({ code: data.code }) }) } } } </script>
<template> <el-form label-width="80px"> <el-form-item label="參數1"> <el-input disabled v-model="code1"></el-input> </el-form-item> <el-form-item label="參數2"> <el-input disabled v-model="code2"></el-input> </el-form-item> <el-form-item label="參數3"> <el-input disabled v-model="code3"></el-input> </el-form-item> <el-form-item label="參數4"> <el-input disabled v-model="code4"></el-input> </el-form-item> </el-form> </template> <script> export default { data() { return { code1: '', code2: '', code3: '', code4: '' } }, props: { pVue: { type: Object } }, watch: { code1(newVal, oldVal) { console.log(oldVal) console.log(newVal) } }, mounted() { if (this.pVue) { /** * 單項接收 */ this.pVue.$on('send1', data => { this.code1 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) this.pVue.boo = true }) /** * 發送並接收回調 */ this.pVue.$on('send2', (data, cb) => { this.code2 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) // 我的邏輯... 而後返回參數 cb({ code: data.code }) }) /** * 發送接收並再發送 */ this.pVue.$on('send3', (data, cb) => { this.code3 = data.code console.log(`表格組件 => 接收參數 ${data.code}`) // 我的邏輯... 而後返回參數 cb({ code: data.code }, () => { this.code4 = data.code console.log(`表格組件 => 再次接收參數 ${data.code}`) }) }) } } } </script>
2020年12月12日this