Skip to content

Commit d8d0e6d

Browse files
committed
emit () completion confirm 받는 예제 완성. !!!
vuejs/vue#5443 참조

You could also just pass the resolve parameter directly to $emit like so:
1 parent 850ee7a commit d8d0e6d

File tree

5 files changed

+116
-2
lines changed

5 files changed

+116
-2
lines changed

package-lock.json

Lines changed: 11 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
"core-js": "^3.6.5",
1212
"deep-equal": "^2.0.3",
1313
"lodash": "^4.17.20",
14-
"moment": "^2.27.0",
1514
"v-calendar": "^1.0.8",
1615
"vue": "^2.6.11",
1716
"vue-monthly-picker": "^0.2.8",
@@ -30,11 +29,13 @@
3029
"babel-eslint": "^10.1.0",
3130
"eslint": "^6.7.2",
3231
"eslint-plugin-vue": "^6.2.2",
32+
"moment": "^2.27.0",
3333
"sass": "^1.19.0",
3434
"sass-loader": "^8.0.0",
3535
"tui-grid": "^4.15.0",
3636
"vue-cli-plugin-axios": "^0.0.4",
3737
"vue-cli-plugin-vuetify": "^2.0.7",
38+
"vue-moment": "^4.1.0",
3839
"vue-template-compiler": "^2.6.11",
3940
"vuetify-loader": "^1.3.0"
4041
},

src/components/HelloWorld.vue

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,56 @@
8888
</v-row>
8989
</v-col>
9090
</v-row>
91+
fire message : <input type='text' v-model='message' size=20 style="background-color:yellow;"> &nbsp;&nbsp;
92+
<input type='button' value="fire message" @click="fireMessage" style="width: 100px; background-color: darkgray;"> <br>
93+
here : <emit-async-await></emit-async-await> 여기까지...
9194
</v-container>
9295
</template>
9396

9497
<script>
98+
99+
import Vue from 'vue'
100+
import EmitAsyncAwait from './emitasyncawait'
101+
102+
import {EventBus} from '../service/emitasyncawait_evtbus'
103+
import moment from 'vue-moment'
104+
Vue.use(moment)
105+
106+
Vue.component("emit-async-await", EmitAsyncAwait);
107+
95108
export default {
96109
name: 'HelloWorld',
110+
components: {
111+
EmitAsyncAwait
112+
},
113+
created() {
114+
console.log('created called')
115+
116+
const self = this
117+
console.log('created . self.message=' + self.message)
118+
},
119+
methods: {
120+
now: function() {
121+
const self = this
122+
123+
return self.$moment(new Date()).format('HH:mm:ss')
124+
},
125+
fireMessage: async function() {
126+
const self = this
127+
128+
console.log('[' + self.now() + '] ' + self.message + ' fired now...')
129+
130+
let result = new Promise((resolve) => EventBus.$emit('fire-message', self.message, resolve) )
131+
132+
await result;
97133
134+
result.then( (resultCode) => {
135+
console.log('[' + self.now() + '] ' + 'resultCode = ' + resultCode)
136+
});
137+
}
138+
},
98139
data: () => ({
140+
message: '',
99141
ecosystem: [
100142
{
101143
text: 'vuetify-loader',

src/components/emitasyncawait.vue

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<template>
2+
<div style="width: 400px">
3+
<span> message : {{ message }} </span>
4+
</div>
5+
</template>
6+
7+
<script>
8+
// eslint-disable-next-line no-unused-vars
9+
import Vue from 'vue'
10+
11+
import {EventBus} from '../service/emitasyncawait_evtbus'
12+
import moment from 'vue-moment'
13+
14+
Vue.use(moment)
15+
16+
// Or just use in separate component
17+
export default {
18+
name: 'EmitAsyncAwait',
19+
data: function() {
20+
return {
21+
message: ''
22+
}
23+
},
24+
created () {
25+
26+
// eslint-disable-next-line no-unused-vars
27+
const self = this
28+
29+
// EventBus.$on('fire-message', self.changeMessage)
30+
31+
EventBus.$on('fire-message', (msg, resolve) => {
32+
self.message = msg
33+
34+
setTimeout( () => {
35+
console.log( '[' + self.now() + '] ' + 'message: ' + msg + ' received ')
36+
resolve(200)
37+
}, 2000)
38+
})
39+
},
40+
methods: {
41+
now: function() {
42+
const self = this
43+
44+
return self.$moment(new Date()).format('HH:mm:ss')
45+
},
46+
changeMessage: function (msg, resolve) {
47+
// eslint-disable-next-line no-unused-vars
48+
const self = this
49+
self.message = msg
50+
51+
setTimeout( () => {
52+
console.log( '[' + self.now() + '] ' + 'message: ' + msg + ' received ')
53+
resolve(200)
54+
}, 2000)
55+
}
56+
}
57+
}
58+
</script>

src/service/emitasyncawait_evtbus.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Vue from 'vue';
2+
3+
export const EventBus = new Vue();

0 commit comments

Comments
 (0)