折叠面板
目标 点击展开或收起时,把内容区域显示或隐藏
- 1 给按钮添加点击事件 @click="ishow = !ishow">
- 2 给内容添加显示或隐藏的类名 v-show="ishow "
- 3 给予参数data: ishow为flase flase隐藏 ture显示 拓展: v-show指令是根据条件显示DOM元素的指令,可以用来 动态控制DOM元素的显示和隐藏,v-show后跟的是判断 条件,不管初始条件是什么,元素总是会被渲染 语法:
v-show="判断语法"
1 原理
当v-show值为false时,绑定DOM的dispaly:none 当v-show值为false时, 绑定DOM的dispaly为true时,绑定DOM会移除 display:none, 此时并不是把 display变成block, 而是保持元素 style的原始性,也就是说,不管初始条件 是什么,元素总是会被渲染
2 实现
从实现效果可以看出DOM元素始终是存在的,v-show只是利用元素的display属性 控制着元素的显示隐藏
v-if指令
1 原理
看到v-if,我们可以想刀if...else条件判断语句,没错,Vue中还提供了v-else 指令和v-else-if指令,学会v-if指令其他两个指令也就会了。
这样我们再来理解v-if指令,就是根据表达式值的真假来销毁或重建一个我们绑定 的DOM元素。
2实现
从实现效果可以看出flag值为flase时DOM元素被删除
v-show和v-if指令的区别 既然v-show和v-if这两个指令都可以控制DOM元素的行为,那么它们有什么区别呢
1 控制手段不同
我们从上面两个实现图可以看出,通过浏览器控制改变表达式真值时,虽然页面 效果都一样,但是DOM元素隐藏时大不相同: v-show指令设置隐藏是给绑定的DOM元素添加CSS样式:display:none,但是DOM元素 仍然存在
v-if指令设置隐藏是将DOM元素整个删除,此时DOM元素不再存在
2编译过程不同
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听 和子组件;而v-show只是简单的基于CSS切换,不管初识条件是什么,元素总是会被渲染
3 编译条件不同
v-show由false变为true时不会触发组建的生命周期 v-if由false变为true时,触发租金贷beforeCreate,create,beforeMount, mounter钩子,由true变为flas
代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<style>
body {
background-color: #ccc;
}
#app {
width: 400px;
margin: 20px auto;
background-color: #fff;
border: 4px solid blueviolet;
border-radius: 1em;
box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
padding: 1em 2em 2em;
}
h3 {
text-align: center;
}
.title {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #ccc;
padding: 0 1em;
}
.title h4 {
line-height: 2;
margin: 0;
}
.container {
border: 1px solid #ccc;
padding: 0 1em;
}
.btn {
/* 鼠标改成手的形状 */
cursor: pointer;
}
</style>
</head>
<body>
<div id="app">
<h3>案例:折叠面板</h3>
<div>
<div class="title">
<h4>芙蓉楼送辛渐</h4>
<span class="btn" @click="isShow = !isShow" >
<!-- 添加点击事件 判断是否点击,点击收起内容,在次点击放下 -->
{{ isShow ? '收起' : '展开' }}
</span>
</div>
<div class="container" v-show="isShow">
<!-- 判断是否点击 v-show 显示与隐藏 -->
<p>寒雨连江夜入吴,</p>
<p>平明送客楚山孤。</p>
<p>洛阳亲友如相问,</p>
<p>一片冰心在玉壶。</p>
</div>
</div>
</div>
<script>
const app = new Vue({
el: '#app',
data: {
isShow:false
}
})
</script>
</body>
</html>