$nextTick
1,语法:this.$nextTick(回调函数)
2,作用:在下一次DOM更新结束后执行其指定的回调
3,什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行
<template>
<div>
<li>
<label>
<input type="checkbox" :checked="items.state" />
<span v-show="!items.isEidt">{{ items.todoName }}</span>
<input ref="fcInput" v-show="items.isEidt" type="text" :value="items.todoName"
@blur="removeMouse(items, $event)">
</label>
<button class="btn btn-danger">删除</button>
<button class="btn btn-eidt " v-show="!items.isEidt" @click="eidtTodo(items)">编辑</button>
</li>
</div>
</template>
<script>
export default {
name: 'MyItem',
props: ['items', 'checkTodo', 'delTodos'],
data() {
return {
todo: this.todos
}
},
methods: {
eidtTodo(todo) {
//hasOwnProperty是用来检测属性是否为对象的自有属性,如果是,返回true,否者false; 参数指要检测的属性名;
if (todo.hasOwnProperty('isEidt')) {
console.log('有isEidt')
todo.isEidt = true
//使用nextTick在数据更新渲染完毕执行操作Dom的 否则操作dom没有作用
this.$nextTick(() => {
this.$refs.fcInput.focus()
})
} else {
//使用vue的set绑定响应式数据
this.$set(todo, 'isEidt', true)
console.log(todo)
}
},
removeMouse(todo, e) {
todo.isEidt = false
//使用全局事件总线在组件之间进行数据传输
this.$bus.$emit('updateTodo', todo.id, e.target.value)
}
},