v-if和v-show最大的区别就是关于DOM元素加载方式的不同
v-if显示隐藏是将整个DOM元素删除或者添加,如果隐藏,文档将加载不到DOM元素
v-show则是简单切换元素的css属性,等同于css属性中的display,有v-show的元素会始终渲染并保持在DOM中,即DOM元素一直存在
这次碰到的错误是在弹窗上添加了v-if,所以想让弹窗中的input元素获取焦点,但是一直失败,后来才明白,v-if隐藏时,文档中并没有DOM元素,弹窗不存在,所以加载不到弹窗中的内容,故将v-if改成了v-show,文档可以查询到v-show的DOM结构
但是即使将v-if改成v-show,隐藏的弹窗中的input元素依然不能直接使用
this.$refs.input.focus()获取,
后来想到,加载时可以让焦点获取延时生效,所以使用setTimeout
这样即可成功在弹窗出现时,获取弹窗中input元素的焦点