5***@qq.com
5***@qq.com
  • 发布:2019-05-13 17:33
  • 更新:2019-05-14 15:50
  • 阅读:9206

【已解决】uniapp使用v-for多层嵌套后v-if执行报错

分类:uni-app

我做一个树状列表,一个三层嵌套的for循环,类似于三级联动,需要在第三级做一些判断逻辑,我执行这些逻辑时应用报错了,如图所示。求大神指导,谢谢大家。
下面是模拟代码:

<template>  
    <view class="content">  
        <view v-for="(row, index) in data" :key="index">  
            <view>{{row.title}}</view>  
            <!-- list分类 -->  
            <view v-if="row.type == 'list'">  
                <view>list</view>  
                <view v-for="(row1, index1) in row.fieldsList" :key="index1">  
                    <view style="margin-left: 40upx;">{{row1.name}}</view>  
                    <view style="margin-left: 80upx;" v-for="(row2, index2) in row1.content" :key="index2">  
                        <!-- 这里判断数据是否http开头 -->  
                        <view v-if="isHttp(row2)">  
                            我是http链接  
                        </view>  
                        <view>{{row2}}</view>  
                    </view>  
                </view>  
            </view>  
            <!-- text分类 -->  
            <view v-else-if="row.type == 'text'">  
                text  
            </view>  
            <!-- words分类 -->  
            <view v-else-if="row.type == 'words'">  
                words  
            </view>  
        </view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                data: [{  
                        "fieldsList": [{  
                                "content": [  
                                    "1",  
                                    "http://fmissing.oss-cn-hangzhou.aliyuncs.com/4ce28109553e41138fd0c5ad31aa90af.jpg",  
                                    "2"  
                                ],  
                                "name": "学习经历"  
                            },  
                            {  
                                "content": [  
                                    "3",  
                                    "4"  
                                ],  
                                "name": "感情经历"  
                            },  
                            {  
                                "content": [  
                                    "5",  
                                    "6"  
                                ],  
                                "name": "工作经历"  
                            }  
                        ],  
                        "title": "人物生平",  
                        "type": "list"  
                    },  
                    {  
                        "fieldsList": [{  
                                "content": [  
                                    "1",  
                                    "3"  
                                ],  
                                "name": "深刻印象"  
                            },  
                            {  
                                "content": [  
                                    "5",  
                                    "7"  
                                ],  
                                "name": "快乐时光"  
                            },  
                            {  
                                "content": [  
                                    "8",  
                                    "9"  
                                ],  
                                "name": "艰难时刻"  
                            }  
                        ],  
                        "title": "生活轨迹",  
                        "type": "list"  
                    }, {  
                        "content": "哈哈哈",  
                        "title": "人生感悟",  
                        "type": "words"  
                    }, {  
                        "content": "哈哈哈哈哈哈哈哈哈哈哈哈",  
                        "title": "心灵独白",  
                        "type": "text"  
                    }  
                ],  
            }  
        },  
        methods: {  
            isHttp(url) {  
                console.log("---isHttp---" + url);  
                if (url.indexOf("http") == 0) {  
                    return true;  
                }  
                return false;  
            },  
        }  
    }  
</script>  

<style>  
    .content {  
        display: flex;  
        flex-direction: column;  
        flex: 1;  
        background: #FFFFFF;  
    }  
</style>  
2019-05-13 17:33 负责人:无 分享
已邀请:
ZGH0709

ZGH0709

模拟代码没报错啊,你应该是其他地方的问题把。

  • 5***@qq.com (作者)

    内容我重新编辑了,您再看看报的错误

    2019-05-13 19:27

  • 5***@qq.com (作者)

    从错误来看,他说我‘map’未定义,但是用type分类了,不应该存在这个问题啊,想不明白,求教了

    2019-05-13 19:30

  • ZGH0709

    回复 5***@qq.com: 还是没有啊,,,要不你发个 demo, 我看看?

    2019-05-13 20:05

  • 程咬金3斧头

    回复 ZGH0709: 感觉 v-if 不为真,内部的变量还是会进行判断。我也遇到一个问题,类似的,麻烦帮忙看看 http://ask.dcloud.net.cn/question/70826

    2019-05-14 11:33

  • 5***@qq.com (作者)

    回复 ZGH0709: 不可能啊,我这边报错呢,稍等,我弄个demo给你

    2019-05-14 11:59

  • 5***@qq.com (作者)

    回复 ZGH0709: 我上传了测试项目,你下载后运行在小程序看看,我这里是直接报错了。

    2019-05-14 12:05

  • 程咬金3斧头

    回复 5***@qq.com: 赶脚我遇到的和你这个问题差不多。。。

    2019-05-14 12:06

  • 5***@qq.com (作者)

    回复 程咬金3斧头: 是的,我也感觉是这样的

    2019-05-14 12:06

ZGH0709

ZGH0709

目前在多级 v-for 中的 v-if 不能使用函数。

  • 5***@qq.com (作者)

    有其它方案吗?这是bug吗? 后面会修复吗?

    2019-05-14 17:00

  • 5***@qq.com (作者)

    从报错信息来看,他报的map没有定义,我感觉上面这位朋友说的有点道理,会不会v-if=false时还是执行了逻辑导致的?

    2019-05-14 17:05

  • ZGH0709

    回复 5***@qq.com: v-if 中 调用方法,会导致在渲染时执行里面的代码。目前可以考虑使用其他方法代替,比如将v-if 的复杂度,通过组件降低。 该问题后续会进行修复。

    2019-05-15 11:55

  • 5***@qq.com (作者)

    回复 ZGH0709: 好的谢谢,已经换了其它方案实现,希望UNI能早日修复,祝DCloud越来越好。

    2019-05-15 17:56

  • samsp

    回复 ZGH0709: 请问这个问题修复了么,如已修复,需要更新到哪个版本呢,vue改造项目,组件嵌套太多,暂无其他方案替代

    2019-07-02 16:32

  • 羊唯一

    回复 samsp: 都过一年了还是没修复,今天小程序端碰到了,真吐了

    2020-07-24 01:19

该问题目前已经被锁定, 无法添加新回复