2017-11-21 11 views
1

span class = "before-click"을 클릭하면
입력란을 숨기고 대신 입력 class = "after-click"이 표시됩니다.
그리고 나타난 입력 태그는 초점이 맞춰져 있어야합니다!
문제는 $ refs.afterClick을 사용하여 DOM에 액세스하고 .focus()를 주려고하면 예기치 않은 오류로 인해 .focus()가 함수가 아닌 것으로 나타납니다.
이 문제를 해결하는 방법은 무엇입니까? 감사합니다. . Vue - 요소 대상에 대한 참조를 사용하는 refs 사용

답변

2

랩 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>

+1

감사합니다! 이것은 내가 필요한 것이지만 왜 포커스 이벤트가 DOM보다 빨리 발생합니까? –

+0

아직 존재하지 않는 요소에서 .focus()를 호출했습니다. DOM을 업데이트하고 요소를 만들 때까지 기다려야합니다. 이는 Vue의 라이프 사이클 후크와 관련이 있습니다. 종종 데이터에 문제가 있거나 렌더링하는 것이 수명주기의 오해 때문에 발생하는 경우가 있습니다. https://vuejs.org/v2/guide/instance.html#Lifecycle-Diagram –

+0

와우 ... , 나는 그것을 이해하려고 노력할 것이다. 감사! –