Vue 条件渲染
v-if 、v-show 都能控制一个模板标签在页面上显示。
v-if 如果条件不为真是不会挂载到页面上。
v-show 如果条件不为真也会挂载到页面上,只不过不显示出来 display 为 none。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./vue.v2.6.10.dev.js"></script>
</head>
<body>
<div id="app">
<div v-if="show">{{message}}</div>
<div v-show="show">{{message}}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: false,
message: "Hello World",
},
methods: {
}
})
</script>
</body>
</html>
v-show 性能比较好,不需要频繁加载、删除。
v-if 、 v-else
需要连在一起写,否则会出错。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./vue.v2.6.10.dev.js"></script>
</head>
<body>
<div id="app">
<div v-if="show">{{message}}</div>
<div v-else>By World</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: false,
message: "Hello World",
},
methods: {
}
})
</script>
</body>
</html>
v-if
v-else-if
v-else
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./vue.v2.6.10.dev.js"></script>
</head>
<body>
<div id="app">
<div v-if="show === 'a'">This is A.</div>
<div v-else-if="show === 'b'">This is B.</div>
<div v-else>This is others.</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: "a",
},
methods: {
}
})
</script>
</body>
</html>
key 值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./vue.v2.6.10.dev.js"></script>
</head>
<body>
<div id="app">
<div v-if="show">
用户名:<input />
</div>
<div v-else>
邮箱名:<input />
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: false,
},
methods: {
}
})
</script>
</body>
</html>
Vue默认会尝试复用内容,所以假如邮箱名的input有内容的时候,vm.show值变成 true,那么显示的用户名的input也会继承那个内容。
解决这个问题的方案就是加上key,加上key 后就不会复用了。
这是虚拟DOM的优化机制。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="./vue.v2.6.10.dev.js"></script>
</head>
<body>
<div id="app">
<div v-if="show">
用户名:<input key="username"/>
</div>
<div v-else>
邮箱名:<input key="password"/>
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: false,
},
methods: {
}
})
</script>
</body>
</html>