Vue嵌套循环渲染与条件渲染--v-for|v-if

分析接口返回数据结构

  • data对象下有9个键值对 值
  • 分别有数组类型,Object类,和null
  • 数组类型Array下,存有若干个对象,每个对象有若干个值
  • 现 遍历所有键值 , 并将null替换为"暂无"
    在这里插入图片描述

大致效果

在这里插入图片描述

实例代码

<div id="app">
        <div v-for="(item,key) in data_" :key="key">
            <!-- <div class="key">第一层:{{key}}===={{item|demoFn}}</div> -->
            <div class="item"  v-if="item!=null"  v-for="(data_2,key,index) in item" :key="index">
                <!-- <div>第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div> -->
                <div v-if="!(item instanceof Array)">第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div>
                <div v-else class="vfor3" v-for="(data_3,key_3) in data_2">
                    第三层=>键:{{key_3}}---值:{{data_3|demoFn}}
                </div> 
                <hr class="hr2">
            </div>
            <hr class="hr1">
        </div>
    </div>
    
 new Vue({
            el: "#app",
            data: {
                data_: {},
            },
            created() {
                this.getSongInfo();
            },
            filters: {
                demoFn(data) {
                    if (data == null) {
                        return "暂无";
                    }
                    return data;
                }
            },
            methods: {
                getSongInfo() {
                    let url = "http://xxxxxxxxxxxxxxxxxxxxxxxx";
                    let that = this;
                    axios.get(url).then(function (res) {
                        console.log(res.data);
                        that.data_ = res.data.data;
                    })
                }
            }
        })

遍历对象与遍历数组的区别
遍历对象

  • 我们既需要对象的键,也需要值与之对应
    遍历数组
  • 只需要值,键就是索引(0,1,2,3,4…),不显示无作用

判断数据类型

  • item instanceof Array 判断item是否为Array类,是返回true , v-if,渲染此项.反之亦然
  • !(item instanceof Array) 判断item是否不是Array类 ,不是返回true,是返回false

使用{{data_3|demoFn}}数据过滤, 替换值为null的值 .

v-for

  • 第一层v-for,遍历的data,
  • 第二层v-for 选择性遍历,判断v-if="item!=null",遍历的data对象下的每个 ,
  • 第三层v-for 选择性遍历 ,判断 v-if="!(item instanceof Array)"

思考

						<div v-if="!(item instanceof Array)">第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div>
                <div v-else class="vfor3" v-for="(data_3,key_3) in data_2">
                    第三层=>键:{{key_3}}---值:{{data_3|demoFn}}
                </div> 

以上可否替换为以下


                <div v-if="item instanceof Array" class="vfor3" v-for="(data_3,key_3) in data_2">
                    第三层=>键:{{key_3}}---值:{{data_3|demoFn}}
                </div> 
                <div v-else>第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div>

注意

不能以带有v-for的标签写在前面,否则将会导致v-else标签会重复显示,跟着v-for执行了N次 .

css只是为了方便区分观察.

完整实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios@0.24.0/dist/axios.js"></script>
    <style>
        .key{
            color: rgb(15, 15, 15);
        }
        .item{
            color: blueviolet;
        }
        .vfor3{
            color: tomato;
        }
        .hr1{
            height: 5px;
            background-color:  rgb(30, 146, 1);
        }
        .hr2{
            height: 3px;
            background-color:  rgb(76, 159, 192);
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-for="(item,key) in data_" :key="key">
            <!-- <div class="key">第一层:{{key}}===={{item|demoFn}}</div> -->
            <div class="item" v-if="item!=null"  v-for="(data_2,key,index) in item" :key="index">
                
                <!-- <div>第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div> -->
                <div v-if="!(item instanceof Array)">第二层,我是data_2: 键:{{key}}----值:{{data_2|demoFn}}</div>
                <div v-else class="vfor3" v-for="(data_3,key_3) in data_2">
                    第三层=>键:{{key_3}}---值:{{data_3|demoFn}}
                </div> 
                
                <hr class="hr2">
            </div>
            <hr class="hr1">
        </div>
    </div>
    <script>
        new Vue({
            el: "#app",
            data: {
                data_: {},

            },
            created() {
                this.getSongInfo();
            },
            filters: {
                demoFn(data) {
                    if (data == null) {
                        return "暂无";
                    }
                    return data;
                }
            },
            methods: {
                getSongInfo() {
                    let url = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                    let that = this;
                    axios.get(url).then(function (res) {
                        console.log(res.data);
                        that.data_ = res.data.data;
                    })
                }
            }
        })
    </script>
</body>
</html>

参考

Vue官网–条件渲染
Vue官方文档–列表渲染

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue.js 是一个流行的前端框架,提供了一种简单而强大的方式来处理动态渲染页面。v-for 是 Vue.js 中最常用的指令之一,用于循环渲染列表数据。下面我们就来详解一下 Vue.js 中的 v-for 指令。 ## v-for 指令 v-for 指令可以循环渲染一个数组或对象的属性,它的语法格式如下: ```html <div v-for="(item, index) in items" :key="index">{{ item }}</div> ``` 上面的代码中,items 是一个数组,v-for 指令会将数组中的每个元素渲染成一个 div 元素。在循环过程中,item 和 index 分别表示数组的元素和索引。 其中,:key 是必须的属性,用于给每个渲染出的元素指定一个唯一的标识符,以便 Vue.js 能够跟踪每个元素的状态变化。 在 v-for 指令中,还可以使用对象的属性进行循环渲染: ```html <div v-for="(value, key) in object" :key="key">{{ key }}: {{ value }}</div> ``` 上面的代码中,object 是一个对象,v-for 指令会将对象的每个属性渲染成一个 div 元素。在循环过程中,value 和 key 分别表示对象的属性值和属性名。 ## v-for 嵌套Vue.js 中,v-for 指令可以嵌套使用,实现更复杂的渲染效果。例如,可以循环渲染一个二维数组: ```html <div v-for="row in matrix" :key="row[0]"> <div v-for="cell in row" :key="cell">{{ cell }}</div> </div> ``` 上面的代码中,matrix 是一个二维数组,v-for 指令会将每一行渲染成一个 div 元素,然后在每行中再循环渲染每个元素,即每个单元格渲染成一个 div 元素。 ## v-for 和 v-if 结合使用 在 Vue.js 中,v-for 指令和 v-if 指令可以结合使用,实现更灵活的渲染效果。例如,可以根据条件过滤渲染的元素: ```html <div v-for="item in items" v-if="item.visible" :key="item.id">{{ item.name }}</div> ``` 上面的代码中,items 是一个数组,v-for 指令会将数组中的每个元素渲染成一个 div 元素。在渲染过程中,只有 visible 属性为 true 的元素才会被渲染。 ## 总结 v-for 指令是 Vue.js 中常用的指令之一,用于循环渲染列表数据。在使用 v-for 指令时,需要注意给每个渲染出的元素指定一个唯一的标识符,以便 Vue.js 能够跟踪每个元素的状态变化。另外,v-for 指令还可以嵌套使用,实现更复杂的渲染效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦中千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值