반응형
Vuejs 2: 컴포넌트에서 부모로 이벤트 전송
코드는 다음과 같습니다.
html
<div id="app">
{{text}}
<my-component></my-component>
</div>
js
Vue.component('my-component', {
template: '<button @click="click">Click me</button>',
methods: {
click() {
this.$emit('send', 'bye')
}
}
})
new Vue({
el: "#app",
data: {
text: "hello"
},
created() {
this.$on('send', (text) => {
this.text = text;
})
}
})
작업 예: https://jsfiddle.net/rjurado/y4yf6nve/
왜 이벤트send
동작하지 않는가?
부모 컴포넌트는 다음을 사용하여 자녀 컴포넌트에서 방출되는 이벤트를 직접 청취할 수 있습니다.v-on
.
html
<div id="app">
{{text}}
<my-component v-on:send="sendText"></my-component>
</div>
js
Vue.component('my-component', {
template: '<button @click="click">Click me</button>',
methods: {
click() {
this.$emit('send', 'bye')
}
}
})
new Vue({
el: "#app",
data: {
text: "hello"
},
methods: {
sendText(text) {
alert(text)
}
}
})
작업 예: https://jsfiddle.net/y4yf6nve/2/
this.$emit
Vue 컴포넌트만 참조해 주세요.를 사용해야 합니다.root
루트 인스턴스의 컴포넌트와 통신하는 인스턴스 속성.기본적으로 루트를 이벤트에 추가합니다.
this.$root.$emit('send', 'bye')
this.$root.$on('send', (text) => {
this.text = text;
})
작업 예: jsFiddle
Vue.js 중앙 이벤트 버스
더 좋은 방법은 중앙 이벤트 버스: docs를 사용하는 것입니다.
var bus = new Vue();
Vue.component('my-component', {
template: '<button @click="click">Click me</button>',
methods: {
click() {
bus.$emit('send', 'bye')
}
}
})
new Vue({
el: "#app",
data: {
text: "hello"
},
created() {
bus.$on('send', (text) => {
this.text = text;
})
}
})
작업 예: jsFiddle
이후 참조를 위해 사용자 지정 이벤트 이름을 camelCase로 바꿀 수 없습니다.사용하다this.$emit('send_event', 'bye')
대신this.$emit('sendEvent', 'bye')
https://github.com/vuejs/vue/issues/4044
언급URL : https://stackoverflow.com/questions/42156059/vuejs-2-send-event-from-component-to-parent
반응형
'programing' 카테고리의 다른 글
Nuxt의 buefy에서 Navbar, Dropdown 및 Modal만 Import하려면 어떻게 해야 하나요? (0) | 2022.08.15 |
---|---|
선택한 Vue Js 드롭다운에서 값 가져오기 (0) | 2022.08.15 |
어떻게 하면 C에서 OO 스타일의 다형을 시뮬레이션 할 수 있나요? (0) | 2022.08.15 |
Vue.js 2.0에서 목록을 2개 이상 필터링하여 선택 (0) | 2022.08.08 |
Nuxt 및 Vue-Native-Websocket에서의 Vuex 사용 (0) | 2022.08.08 |