반응형
VueJ의 동적 구성 요소에 대한 사용자 지정 이벤트 프로그래밍 바인딩s
vuejs 앱에서 동적 구성 요소를 사용하는 방법은 다음과 같습니다.
<mycomponent>
<component ref="compRef" :is="myComponent" v-bind="myComponentProps"></component>
<div class="my-buttons">
<my-button label="Reset" @click="reset()"/>
</div>
</mycomponent >
myComponent
는 주입할 실제 컴포넌트를 유지하는 부모 컴포넌트상의 지주입니다. myComponentProps
주입된 인스턴스(instance)의 포롭을 고정하는 지주이기도 합니다.
청취자를 구성 요소에 동적으로 바인딩하는 방법도 알고 싶습니다. 여러 이벤트가 있는 v-on에는 개체를 보낼 수 없습니다.
프로그램적으로 추가할까 생각 중이었는데 Vue 커스텀이벤트(예:addEventListener
커스텀 이벤트에 상당)
어떤 팁이라도 주시면 감사하겠습니다!
Vue 2.2+에서는 다음과 같이 이벤트청취자를 프로그래밍 방식으로 추가할 수 있습니다.
new Vue({
el: '#app',
created() {
const EVENTS = [
{name: 'my-event1', callback: () => console.log('event1')},
{name: 'my-event2', callback: () => console.log('event2')},
{name: 'my-event3', callback: () => console.log('event3')}
]
for (let e of EVENTS) {
this.$on(e.name, e.callback); // Add event listeners
}
// You can also bind multiple events to one callback
this.$on(['click', 'keyup'], e => { console.log('event', e) })
}
})
<script src="https://unpkg.com/vue@2.6.8/dist/vue.min.js"></script>
<div id="app">
<div>
<!-- v-on:EVENTNAME adds a listener for the event -->
<button v-on:click="$emit('my-event1')">Raise event1</button>
<button v-on:click="$emit('my-event2')">Raise event2</button>
<button v-on:click="$emit('my-event3')">Raise event3</button>
</div>
<div>
<!-- v-on shorthand: @EVENTNAME -->
<button @click="$emit('my-event1')">Raise event1</button>
<button @click="$emit('my-event2')">Raise event2</button>
<button @click="$emit('my-event3')">Raise event3</button>
</div>
</div>
Vue 2.6+에서는 템플릿에 이벤트청취자를 동적으로 추가할 수 있습니다.
new Vue({
el: '#app',
data: {
eventname: 'click',
},
methods: {
handler(e) {
console.log('click', e.target.innerText)
}
}
})
<script src="https://unpkg.com/vue@2.6.8/dist/vue.min.js"></script>
<div id="app">
<button @[eventname]="handler">Raise dynamic event</button>
<!-- Set dynamic key to null to remove event listener -->
<button @click="eventname = null">Unbind event</button>
</div>
여러 이벤트 리스너를 선언적으로 바인드할 수도 있습니다.v-on="{event1: callback, event2: callback, ...}"
:
new Vue({
el: '#app',
methods: {
onClick() { console.log('click') },
onKeyUp(e) { console.log('keyup', e.keyCode) }
}
})
<script src="https://unpkg.com/vue@2.6.8/dist/vue.min.js"></script>
<div id="app">
<input type="text" placeholder="type here" v-on="{click: onClick, keyup: onKeyUp}">
</div>
언급URL : https://stackoverflow.com/questions/48250832/programmatically-bind-custom-events-for-dynamic-components-in-vuejs
반응형
'programing' 카테고리의 다른 글
파이어베이스 호스팅을 사용할 때 vuej의 환경 변수에 파이어베이스 구성 매개 변수를 저장하는 방법 (0) | 2022.08.18 |
---|---|
VueJ - 슬롯 래핑 요소에 스타일 적용 (0) | 2022.08.18 |
Vue: Vuex getter에서 Per-Route Guard를 사용하는 방법 (0) | 2022.08.18 |
글로벌 변수 앞에 static 키워드를 사용하는 경우 (0) | 2022.08.18 |
Java &= 운영자는 & 또는 &&를 적용합니까? (0) | 2022.08.17 |