Vue之v-if之细节
完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../js/vue.js"></script>
<title>v-if</title>
</head>
<body>
<div id="app">
<span v-if="loginFlag"><label for="myUser">用户名登陆: </label><input type="text" placeholder="请输入用户名" id="myUser" /></span>
<span v-else><label for="myId">用户ID登陆: </label><input type="text" placeholder="请输入用户ID" id="myId" /></span>
<button @click="loginFlag=!loginFlag">点我变换</button>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
loginFlag: true
}
})
</script>
</body>
</html>
效果如图:
点击切换自如。
我们再实验另外一各情况:
在文本框里输入内容后,再点击切换按扭,效果如下图:
文体框里内容没有清空,做如下处理可避免这种情况。
<span v-if="loginFlag"><label for="myUser">用户名登陆: </label><input type="text" placeholder="请输入用户名" id="myUser" key="myUser"/></span>
<span v-else><label for="myId">用户ID登陆: </label><input type="text" placeholder="请输入用户ID" id="myId" key="myId"/></span>
在文本框属性里分别加上不同的key值。测试效果如图:
之所以产生这种情况,是因为Vue在转换虚拟DOM时,考虑到效率的原因,只对不同key值的DOM转换。