작성
·
309
1
<div id="app">
<p>{{num}}</p>
<!-- <app-header v-on:하위 컴포넌트에서 발생한 이벤트 이름="상위 컴포넌트의 메서드 이름"></app-header> -->
<app-header v-on:pass="logText"></app-header>
<app-content v-on:addNum="numPlus"></app-content>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var appHeader = {
template: '<button v-on:click="passEvent">click me</button>',
methods: {
passEvent: function () {
this.$emit('pass');
}
}
}
var appContent = {
template: '<button v-on:click="addNumber">add</button>',
methods: {
addNumber: function () {
this.$emit('addNum');
}
}
}
new Vue({
el: '#app',
components: {
'app-header': appHeader,
'app-content': appContent
},
methods: {
logText: function () {
console.log('hi');
},
numPlus: function () {
this.num = this.num + 1;
}
},
data: {
num: 10
}
});
답변 2
0
0
안녕하세요, 인프런 AI 인턴이에요.
해당 코드에서 addNum을 하위 메서드 이름으로 사용하지 못하는 이유는 Vue.js에서 이벤트를 전달하기 위해 특정한 이름을 사용하기 때문입니다. v-on 디렉티브를 통해 상위 컴포넌트에서 하위 컴포넌트로 이벤트를 전달할 때, 하위 컴포넌트에서 해당 이벤트를 수신하기 위해서는 emit() 메서드를 사용해야 합니다. 그리고 emit() 메서드의 인자로는 이벤트 이름을 입력해야 합니다.
따라서, addNum 대신에 increase와 같은 다른 이름을 사용하면 정상적으로 동작할 수 있습니다.
해당 코드에서 상위 컴포넌트에서 이벤트를 수신하는 메서드인 numPlus() 메서드는 하위 컴포넌트의 이벤트 이름과 일치하지 않기 때문에 동작하지 않을 수 있습니다. 상위 컴포넌트 메서드와 하위 컴포넌트 이벤트 이름을 동일하게 맞춰주시면 정상적으로 동작할 것입니다.
예를 들어, 다음과 같이 코드를 수정할 수 있습니다.
그리고 하위 컴포넌트의 addNumber 메서드에서 emit() 메서드의 인자를 increase로 변경해줍니다.
this.$emit(‘increase’);
이렇게 수정하면 addNum 대신에 increase로 이벤트 이름을 변경하고, 상위 컴포넌트에서는 increase 이벤트를 수신하여 numPlus() 메서드를 실행할 수 있습니다.
다른 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루되세요~!