랩 nextTick의 포커스 이벤트
var myApp = new Vue({
el: '#app',
data: {
onEdit: false,
msg: 'Something in here',
},
methods: {
switchAndFocus() {
if(!this.onEdit) {
this.onEdit = true;
this.$refs.afterClick.focus();
}
},
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
<div id="app">
<span class="before-click" @click="switchAndFocus()" v-show="!onEdit">{{msg}}</span>
<input type="text" class="after-click" ref="afterClick" :value="msg" v-show="onEdit">
</div>
- DOM을 업데이트하고 입력을 표시 할 때까지이 포커스 이벤트를 연기한다.
https://vuejs.org/v2/api/#Vue-nextTick
var myApp = new Vue({
el: '#app',
data: {
onEdit: false,
msg: 'Something in here',
},
methods: {
switchAndFocus() {
if(!this.onEdit) {
this.onEdit = true;
this.$nextTick(function(){
this.$refs.afterClick.focus();
});
}
},
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
<div id="app">
<span class="before-click" @click="switchAndFocus()" v-show="!onEdit">{{msg}}</span>
<input type="text" class="after-click" ref="afterClick" :value="msg" v-show="onEdit">
</div>
감사합니다! 이것은 내가 필요한 것이지만 왜 포커스 이벤트가 DOM보다 빨리 발생합니까? –
아직 존재하지 않는 요소에서 .focus()를 호출했습니다. DOM을 업데이트하고 요소를 만들 때까지 기다려야합니다. 이는 Vue의 라이프 사이클 후크와 관련이 있습니다. 종종 데이터에 문제가 있거나 렌더링하는 것이 수명주기의 오해 때문에 발생하는 경우가 있습니다. https://vuejs.org/v2/guide/instance.html#Lifecycle-Diagram –
와우 ... , 나는 그것을 이해하려고 노력할 것이다. 감사! –