13-Vue核心-条件渲染
使用 v-if 做条件渲染
写法:
1)v-if = "表达式"
2)v-else-if = "表达式"
3)v-else = "表达式" 或 简写为 v-else
适用于:切换频率较低的场景
特点:不展示的DOM元素直接被移除
注意:v-if 可以和 v-else-if 、v-else 一起使用,但要求结构不能被"打断"
使用 v-show 做条件渲染
写法:
v-show = "表达式"
适用于:切换频率较高的场景
特点:不展示的DOM元素不会被移除,仅仅只是样式被隐藏掉,相当于标签display设置为none
v-if 和 v-show 的本质区别
1)v-if 是动态的向DOM树内添加或者删除DOM元素,而 v-show 相当于是把标签display设置为none,显示隐藏
2)使用 v-if 时,元素可能无法获取到,而使用 v-show 一定可以获取到
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件渲染</title>
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="root">
<!-- 使用 v-show 做条件渲染 -->
<!-- 当v-show="false"时,相当于标签display设置为none,显示隐藏 -->
<h2 v-show="is_show === '显示'">欢迎来到{{name}}的博客园</h2>
<!-- 使用 v-if 做条件渲染 -->
<!-- 当v-if="false"时,则是动态的向DOM树内添加或者删除DOM元素 -->
<h2 v-if="is_show === '显示'">欢迎来到{{name}}的博客园1</h2>
<h2 v-else-if="is_show === '隐藏'">欢迎来到{{name}}的博客园2</h2>
<h2 v-else>欢迎来到{{name}}的博客园3</h2>
<button @click="changeShow">切换显示</button>
</div>
<script type="text/javascript">
// 阻止 vue 在启动时生成生产提示
Vue.config.productionTip = false
const vm = new Vue({
el:"#root",
data(){
return{
name:"马铃薯",
is_show:"显示"
}
},
methods:{
changeShow(){
this.is_show === "显示" ? this.is_show="隐藏" : this.is_show="显示"
console.log(this.is_show)
}
}
})
</script>
</body>
</html>


我们需要考虑一个问题,当我们需要用到 v-if 进行条件渲染时,如果是通过以下方式的话,则会在我们想展示的内容外面加上一层<div>,会影响DOM树结构
<div v-if="is_show === '显示'">
<h2>欢迎来到{{name}}的博客园1</h2>
<h2>欢迎来到{{name}}的博客园2</h2>
<h2>欢迎来到{{name}}的博客园3</h2>
</div>

这里可以使用<template>标签,解决这个问题
<template>标签的使用
<template>标签 在页面加载时该标签中的内容不会显示,加载后可以使用 JavaScript 来显示它
<template>标签 不会影响DOM树结构,但只能配合 v-if ,不能配合 v-show
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件渲染</title>
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="root">
<!-- 使用 v-if 做条件渲染 -->
<!-- 当v-if="false"时,则是动态的向DOM树内添加或者删除DOM元素 -->
<!-- 如果通过div标签,做 v-if 条件渲染时,会在我们想展示的内容外面加上一层<div>,会影响DOM树结构 -->
<div v-if="is_show === '显示'">
<h2>欢迎来到{{name}}的博客园1</h2>
<h2>欢迎来到{{name}}的博客园2</h2>
<h2>欢迎来到{{name}}的博客园3</h2>
</div>
<hr/>
<!-- <template>标签 在页面加载时该标签中的内容不会显示,加载后可以使用 JavaScript 来显示它 -->
<!-- <template>标签 不会影响DOM树结构,但只能配合 v-if ,不能配合 v-show-->
<template v-if="is_show === '显示'">
<h2>欢迎来到{{name}}的博客园1</h2>
<h2>欢迎来到{{name}}的博客园2</h2>
<h2>欢迎来到{{name}}的博客园3</h2>
</template>
<button @click="changeShow">切换显示</button>
</div>
<script type="text/javascript">
// 阻止 vue 在启动时生成生产提示
Vue.config.productionTip = false
const vm = new Vue({
el:"#root",
data(){
return{
name:"马铃薯",
is_show:"显示"
}
},
methods:{
changeShow(){
this.is_show === "显示" ? this.is_show="隐藏" : this.is_show="显示"
console.log(this.is_show)
}
}
})
</script>
</body>
</html>


浙公网安备 33010602011771号