Problem Description
点击rename的时候可修改input里的值,希望点击button后可以将焦点设置在input里。
DOM操作可以直接设置focus,但是Vue里不建议进行DOM操作,大家有什么好办法吗
Code//history.vue
<template>
<div id="history">
<ul>
<li class="historyitem"
v-for="item in notes"
class="historyitem"
:class="{haha: activeNote===item}"
@click="updateActiveNote(item)"
>{{item.text}}
<input type="text"
v-model="item.text"
v-if="activeNote===item &&activeNote.show"
@keyup.enter="done()"
@blur = "done()"
>
<button class="rnbtn"
@click="ak">rename</button>
</li>
</ul>
</div>
</template>
<script>
import { updateActiveNote } from '../vuex/actions'
export default {
vuex: {
getters: {
notes: state => state.notes,
activeNote: state => state.activeNote
},
actions: {
updateActiveNote,
}
},
methods: {
done: function(e){
this.activeNote.show = false
},
ak: function(e){
this.activeNote.show = true;
}
},
}
项目中遇到这个问题,搜了一下,其实官方已经给出解决方案,就是自定义指令:
https://vuejs.org/v2/guide/cu...
具体实现
在组件里设置自定义指令:
指令插入的时候,通过内置的参数,判断如果传入的值是true,将该元素focus
模板:
组件里控制focusStatus变量,切换选中input状态。