目录
单独使用v-if,变量为布尔值。
- "app">
- <h2 v-if="flag1">hello!h2>
- <h2 v-if="flag2">hello!Vue!h2>
-
- <script src="../js/vue.js">script>
- <script>
- var vm = new Vue({
- el:'#app',
- data() {
- return{
- flag1:true,
- flag2:false,
- }
- },
- })
- script>
因为flag2的状态为false的,所以不显示。

v-if、v-else、v-else-if联合使用相当于if、elseif、else,但是在条件比较多的时候建议使用计算属性。
直接用例题展示,能够直观的看出具体用法。
给一个分数,在60分以下输出不及格,在60(包括)到75分输出及格,在75(包括)到90输出良好,在90(包括)分到100分输出优秀。
- "app">
- <div v-if="soces<60">不及格div>
- <div v-else-if="soces>=60 && soces<=75">及格div>
- <div v-else-if="soces>75 && soces<=90">良好div>
- <div v-else>优秀div>
- div>
- <script src="../js/vue.js">script>
- <script>
- var vm = new Vue({
- el: '#app',
- data: {
- soces: 95,
- }
- })
- script>

三、v-if、v-else应用bug
如图所示,在更换数据时里面的内容并没有更改。

-
vue在进行DOM渲染是,处于性能考虑,会复用已经存在的元素,而不是每次都创建新的DOM元素。
-
在上面demo中,Vue内部发现原来的input元素不再使用,所以直接将其映射对应虚拟DOM,用来复用。
-
如果不希望出现类似复用问题,可以给对应的dom元素加上key值,并保证key不同。
- "app">
- <span v-if="user">
- <label for="username">用户账号label>
- <input type="text" id="username" key="username" placeholder="请输入用户名">
- span>
- <span v-else="user">
- <label for="email">用户邮箱label>
- <input type="text" id="email" key="email" placeholder="请输入邮箱">
- span>
- <button @click="user=!user">切换登录方式button>
- div>
- <script src="../js/vue.js">script>
- <script>
- var vm = new Vue({
- el: '#app',
- data() {
- return {
- user: true,
- }
- },
- })
- script>
修改后效果:

四、v-show
v-if 在首次渲染的时候,如果条件为假,什么也不操作,页面当作没有这些元素。当条件为真的时候,开始局部编译,动态的向DOM元素里面添加元素。当条件从真变为假的时候,开始局部编译,卸载这些元素,也就是删除。
v-show 不管条件是真还是假,第一次渲染的时候都会编译出来,也就是标签都会添加到DOM中。之后切换的时候,通过display: none;样式来显示隐藏元素。可以说只是改变css的样式,几乎不会影响什么性能。
-
- .d1 {
- color: red;
- }
-
- <div id="app">
- <div class="d1" v-show="flag">hello Vue!div>
- <div v-show="!flag">hello Vue!div>
- <button @click="handle">变色button>
- div>
- <script src="../js/vue.js">script>
- <script>
- let vm = new Vue({
- el: '#app',
- data: {
- flag: false,
- },
- methods: {
- handle() {
- this.flag = !this.flag
- }
- },
- })
- script>
通过下图可以看到,两个div的display的属性在来换交换。

五、v-for遍历数组
- "app">
-
- <ul>
- <li v-for="item in names" >{{item}}li>
- ul>
-
- <ul>
- <li v-for="(item,index) in names" >{{item+"---"+index}}li>
- ul>
-
- <script src="../js/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- data:{
- names:["zzz","ttt","yyy"]
- }
- })
- script>
一般需要使用索引值。- {{index+":"+item}}
index表示索引,item表示当前遍历的元素。

六、v-for遍历对象
- "app">
-
-
- <ul>
- <li v-for="(item,key) in user" >{{key+"---"+item}}li>
- ul>
-
- <ul>
- <li v-for="(item,key,index) in user" >{{key+"---"+item+"---"+index}}li>
- ul>
-
-
- <script src="../js/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- data:{
- user:{
- name:"zzz",
- height:188,
- age:24
- }
- }
- })
- script>

-
相关阅读:
SQL刷题查漏补缺7
vue实现的商品列表网页
【YOLO改进】换遍主流单阶段检测器主干网络(基于MMYOLO)
分享5款.NET开源免费的Redis客户端组件库
“事后达尔文”—— 游戏业务效果评估方法实践
Git Flow,Git团队协作最佳实践
CCPC 2021威海 - G. Shinyruo and KFC(组合数,小技巧)
OpenMLDB新手入门开源介绍
信息系统项目管理师(2022年)—— 重点内容:项目进度管理(6)
Java面对对象的特征之二:继承性 :why?
-
原文地址:https://blog.csdn.net/qq_65715980/article/details/126128342