• Vue条件判断及循环遍历(v-if、v-elseif、v-else、v-show、v-for)


    目录

    一、v-if

     二、v-if、v-elseif、v-else

    三、v-if、v-else应用bug

    四、v-show 

     五、v-for遍历数组

     六、v-for遍历对象


    一、v-if

    单独使用v-if,变量为布尔值。

    1. "app">
    2. <h2 v-if="flag1">hello!h2>
    3. <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-elseif、v-else

    v-if、v-else、v-else-if联合使用相当于if、elseif、else,但是在条件比较多的时候建议使用计算属性。

    直接用例题展示,能够直观的看出具体用法。

    给一个分数,在60分以下输出不及格,在60(包括)到75分输出及格,在75(包括)到90输出良好,在90(包括)分到100分输出优秀。

    1. "app">
    2. <div v-if="soces<60">不及格div>
    3. <div v-else-if="soces>=60 && soces<=75">及格div>
    4. <div v-else-if="soces>75 && soces<=90">良好div>
    5. <div v-else>优秀div>
    6. div>
    7. <script src="../js/vue.js">script>
    8. <script>
    9. var vm = new Vue({
    10. el: '#app',
    11. data: {
    12. soces: 95,
    13. }
    14. })
    15. script>

    三、v-if、v-else应用bug

    如图所示,在更换数据时里面的内容并没有更改。

     

    1. vue在进行DOM渲染是,处于性能考虑,会复用已经存在的元素,而不是每次都创建新的DOM元素。

    2. 在上面demo中,Vue内部发现原来的input元素不再使用,所以直接将其映射对应虚拟DOM,用来复用。

    3. 如果不希望出现类似复用问题,可以给对应的dom元素加上key值,并保证key不同。

    1. "app">
    2. <span v-if="user">
    3. <label for="username">用户账号label>
    4. <input type="text" id="username" key="username" placeholder="请输入用户名">
    5. span>
    6. <span v-else="user">
    7. <label for="email">用户邮箱label>
    8. <input type="text" id="email" key="email" placeholder="请输入邮箱">
    9. span>
    10. <button @click="user=!user">切换登录方式button>
    11. div>
    12. <script src="../js/vue.js">script>
    13. <script>
    14. var vm = new Vue({
    15. el: '#app',
    16. data() {
    17. return {
    18. user: true,
    19. }
    20. },
    21. })
    22. script>

    修改后效果:

    四、v-show 

    ​ v-if 在首次渲染的时候,如果条件为假,什么也不操作,页面当作没有这些元素。当条件为真的时候,开始局部编译,动态的向DOM元素里面添加元素。当条件从真变为假的时候,开始局部编译,卸载这些元素,也就是删除。

    ​ v-show 不管条件是真还是假,第一次渲染的时候都会编译出来,也就是标签都会添加到DOM中。之后切换的时候,通过display: none;样式来显示隐藏元素。可以说只是改变css的样式,几乎不会影响什么性能。

    1. <div id="app">
    2. <div class="d1" v-show="flag">hello Vue!div>
    3. <div v-show="!flag">hello Vue!div>
    4. <button @click="handle">变色button>
    5. div>
    6. <script src="../js/vue.js">script>
    7. <script>
    8. let vm = new Vue({
    9. el: '#app',
    10. data: {
    11. flag: false,
    12. },
    13. methods: {
    14. handle() {
    15. this.flag = !this.flag
    16. }
    17. },
    18. })
    19. script>

    通过下图可以看到,两个div的display的属性在来换交换。

     五、v-for遍历数组

    1. "app">
    2. <ul>
    3. <li v-for="item in names" >{{item}}li>
    4. ul>
    5. <ul>
    6. <li v-for="(item,index) in names" >{{item+"---"+index}}li>
    7. 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遍历对象

    1. "app">
    2. <ul>
    3. <li v-for="(item,key) in user" >{{key+"---"+item}}li>
    4. ul>
    5. <ul>
    6. <li v-for="(item,key,index) in user" >{{key+"---"+item+"---"+index}}li>
    7. 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