vue重用机制:
也叫惰性机制 , vue使用v-if进行标签的切换时, 如果将要销毁和将要创建标签时同一种标签, 那么vue不会销毁和新建,而是把原有的标签重置属性和样式后直接拿来用, 可能造成输入框内容被保留下来
怎么避免vue的重用机制?
在需要创建和销毁的标签上分别添加key属性, key值相同则重用, key值不同则不重用, 默认不加key属性,值是相同的
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<button @click="btnClick">切换登录方式</button>
<button @click="()=>{login=!login}">事件函数可以用匿名函数直接实现</button>
<div v-if="login">
<input type="text" placeholder="请输入账号信息">
<input key="pas" type="password" placeholder="请输入密码信息">
</div>
<div v-else>
<input type="text" placeholder="请输入手机号信息">
<input key="code" type="text" placeholder="请输入验证码信息">
<textarea name="" id="" cols="30" rows="10"></textarea>
</div>
<!-- 以上使用v-if控制标签切换时,发现标签并没有严格执行创建和销毁(因为切换后输入框的数据还在,说明输入框并未销毁), 由于vue的重用机制造成
vue重用机制: 也叫惰性机制 , vue使用v-if进行标签的切换时, 如果将要销毁和将要创建标签时同一种标签, 那么vue不会销毁和新建,而是把原有的标签重置属性和样式后直接拿来用, 可能造成输入框内容被保留下来
怎么避免vue的重用机制?
在需要创建和销毁的标签上分别添加key属性, key值相同则重用, key值不同则不重用, 默认不加key属性,值是相同的
-->
<!-- v-for循环时,建议添加属性key,保证key值都不同, 避免重用机制造成渲染异常 -->
<div v-for="item,i in arr" :key="i">{{item.age}}</div>
</div>
<script>
new Vue({
el: '#myApp',
data: {
login: true,
arr: [
{age:10},
{age:20},
{age:30},
{age:20}
]
},
methods: {
btnClick(){
this.login = !this.login;
}
}
})
</script>
</body>