1***@qq.com
1***@qq.com
  • 发布:2020-08-18 16:43
  • 更新:2020-08-27 15:25
  • 阅读:1114

【报Bug】模版渲染 v-if v-else-if 逻辑判断问题

分类:uni-app

产品分类: uniapp/小程序/阿里

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macos catalina 10.15.6

HBuilderX类型: 正式

HBuilderX版本号: 2.8.6

第三方开发者工具版本号: 小程序开发者版本1.12.10 (1.12.10)

基础库版本号: 没关注

项目创建方式: HBuilderX

示例代码:
<template>  
    <view>  
        <view @click="toggle">  
            123  
            <view v-if="flag && isTrue(card.number) && hasOwn(card.number)">123</view>  
            <view v-else-if="hasOwn(card.number)">456</view>  
        </view>  
    </view>  
</template>  
<script>  
    export default{  
        data() {  
            return {  
                flag: true,  
                card: {  
                    number: [2]  
                }  
            }  
        },  
        methods: {  
            isTrue(item) {  
                return item.some(n => n > 1)  
            },  
            hasOwn(item) {  
                return item.length  
            },  
            toggle() {  
                this.$set(this.card, 'number', [1])  
                this.$nextTick(() => {  
                    console.log(this.flag && this.isTrue(this.card.number) && this.hasOwn(this.card.number), this.hasOwn(this.card.number))  
                })  
            }  
        }  
    }  
</script>  
<style></style>

操作步骤:

无论怎么点击 走不到v-else-if 逻辑中

预期结果:

可以依次切换

实际结果:

有一处逻辑无法进入

bug描述:

模版渲染时使用v-if v-else-if判断时 出现的解析问题

查看渲染逻辑处发现此处走了两个m1 并没有m0

var render = function() {  
  var _vm = this  
  var _h = _vm.$createElement  
  var _c = _vm._self._c || _h  
  var m0 = _vm.isTrue(_vm.card.number)  
  var m1 = _vm.hasOwn(_vm.card.number)  
  var m2 = !(_vm.flag && m1 && m1) ? _vm.hasOwn(_vm.card.number) : null  
  _vm.$mp.data = Object.assign(  
    {},  
    {  
      $root: {  
        m0: m0,  
        m1: m1,  
        m2: m2  
      }  
    }  
  )  
}
2020-08-18 16:43 负责人:无 分享
已邀请:

最佳回复

DCloud_UNI_GSQ

DCloud_UNI_GSQ

HBuilderX 2.8.7 已修复

DCloud_UNI_GSQ

DCloud_UNI_GSQ

bug 确认,已加分,后续修复

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

    目前版本又出现类似问题


    <template>  
    <view>
    <text v-if="flag && isTrue(card.number) && hasOwn(card.number)"></text>
    </view>
    </template>

    编译为


    var m0 = _vm.flag && vum.isTrue(card.number)  
    var m1 = card.m0 && _vm.hasOwn(card.number)
    return {
    m0: m0,
    m1: m1
    }

    2021-08-19 09:07

  • DCloud_UNI_GSQ

    回复 1***@qq.com: 版本号多少

    2021-08-19 21:02

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

    回复 DCloud_UNI_GSQ:

    我新建了个bug 反馈 地址: https://ask.dcloud.net.cn/question/129122


    xbuilder X 3.2.2.20210818

    xbuilder X 3.1.13

    这两个版本暂时都不可以

    2021-08-20 13:31

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